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