在SQL Server中将不同的日期格式转换为单一格式

时间:2016-11-11 07:32:37

标签: sql-server

我桌子的STRING栏之一有日期格式“mm-dd-yyyy”和“yyyy-mm-dd”。在选择数据时,我试图将其转换为DATE格式,但它给了我转换错误。我认为这是因为SQL无法一次转换2种不同的格式。我怎样才能实现这一目标,让两种格式一次性转换为DATE。

2 个答案:

答案 0 :(得分:3)

您应该使用date数据类型,而不是将它们存储为字符串。

但您仍需要将代码转换为该代码。

您可以使用CASE表达式在110和120之间切换样式

WITH T(Col) As
(
SELECT '04-01-2010' UNION ALL
SELECT '2010-04-01'
)
SELECT Col,
       CONVERT(date, Col,
       CASE WHEN COL LIKE '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' then 110 
            WHEN COL LIKE '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' then 120
        END
        )
FROM T

答案 1 :(得分:0)

如果我是正确的,那么你不能同时将DATE转换为两种不同的格式。但是在查看您的问题时,我建议您分析列中所有不同的DATE格式,并尝试编写查询,如下所示:

DECLARE @DATECol TABLE (DATEVAL varchar(20))
INSERT @DATECol VALUES ('2016-07-01'),('01/07/2016'),('01JULY2016'),('19/07/16'),('28-08-2008')

select 
    CASE 
        WHEN ISNUMERIC(left(DATEVAL,4)) = 1 then CAST(DATEVAL as DATE) 
        WHEN LEN(DATEVAL) = 10 then CONVERT(DATE, DATEVAL, 103) 
        WHEN LEN(DATEVAL) = 8 then CONVERT(DATE, DATEVAL, 3) 
        WHEN CHARINDEX('/',DATEVAL) = 0 and ISNUMERIC(DATEVAL) = 0 then CONVERT(DATE, DATEVAL, 106) 
    END AS [Date] FROM @DATECol

请参阅下面的链接,了解不同的DATE输出格式http://www.w3schools.com/sql/func_convert.asp

希望这有帮助!