sql server中单列中的不同日期格式

时间:2016-02-10 13:14:38

标签: sql sql-server database

我正在使用SQL服务器。我们在表格中有date列,但其中一些以不同的格式存储。

例如:我们有格式为2015-12-09 00:00:12.000的记录,但有些记录的格式为2015/09/09 00:08:09.000或任何其他有效日期类型。 如何从表中识别具有不同日期格式的记录。 我尝试使用isdate()函数,但因为所有日期都有效,所以没有运气。 你能指导我吗?

2 个答案:

答案 0 :(得分:1)

解决方案第1部分

虽然此解决方案可能无法完全解决您的问题,但至少您可以将日期统一为彼此相似,那么您应该通过在查询顶部放置以下内容来大大改善您的位置:

SET DATEFORMAT DMY

OR

SET DATEFORMAT YMD

OR

SET DATEFORMAT MDY

实施例

SELECT
    [date]
FROM
    [your_table]

注意事项:

  • M表示月份,D表示日期,Y表示年份。

  • 设置DATEFORMAT会影响日期在结果集中的显示方式以及日期如何转换为VARCHAR等。

  • 如果您没有设置DATEFORMAT,那么在不同的机器/设置上运行相同的存储过程会产生不同的结果。

解决方案第2部分

您还可以执行一些字符串操作,将 - / 等替换为您选择的字符。

..将以下内容放在查询的顶部:

DECLARE @DateSeparator NVARCHAR(1) = '/'

..将以下内容用作select语句的一部分:

REPLACE(REPLACE([date], '/', @DateSeparator), '-', @DateSeparator)

实施例

SELECT
    REPLACE(REPLACE(CONVERT(NVARCHAR(20), [date]), '/', @DateSeparator), '-', @DateSeparator) AS [date]
FROM
    [your_table]

注意事项:

  • 在上面的示例中,日期分隔符设置为 / ,但将@DateSeparator的值更改为您选择的日期分隔符。

两个解决方案合并

实施例

SET DATEFORMAT YMD

SELECT
    REPLACE(REPLACE(CONVERT(NVARCHAR(20), [date]), '/', @DateSeparator), '-', @DateSeparator) AS [date]
FROM
    [your_table]

注意事项:

  • [your_table] 替换为源表的名称。

答案 1 :(得分:0)

由于日期存储为VARCHAR而不是DATETIME(因为它们应该存在),因此确实没有办法通过SQL来确定它。是日期' 2016-02-01' 2月1日或1月2日?如果你不能说出任何计算机代码如何解决它?

您最好的办法是返回已在表格中插入或更新数据的应用程序,并尝试找出它们可能已使用的内容。如果用户只是输入数据,那么这可能不太有帮助,虽然你可能会寻找一些一致性--Janice总是输入数据MM / DD / YYYY,但皮埃尔总是把它放在DD / MM / YYYY等等这可能是缩小范围的最佳选择。否则,您可能会查看系统中的其他数据 - 例如,如果表格中还有inserted_on列,那么可能是那个,而您的另一个日期通常会在几天之内,等等。