我的表中有VARCHAR列(MyValue)。它有两种不同格式的日期值。
MyValue
----------
25-10-2016
2016-10-13
我想以日期格式展示它们。
我编写了如下查询:
SELECT CONVERT(date, MyValue, 105) FROM MyTable
SELECT CAST(MyValue as date) FROM MyTable
两人都给了我这个错误。Conversion failed when converting date and/or time from character string.
是否存在将数据类型格式转换为日期类型的格式,甚至存储在像上面这样的不同格式中的值?
等着你的答案。提前谢谢。
发布于 2017-09-13 09:34:40
这个有用吗?
declare @varchardates table
(
vcdate varchar(20)
)
INSERT INTO @varchardates VALUES
('25-10-2016'),
('2016-10-13')
SELECT CONVERT(date,vcdate, case when SUBSTRING(vcdate, 3, 1) = '-'
THEN 105 ELSE 126 END) as mydate
FROM @varchardates
根据数据中有多少不同的格式,您可能需要扩展case语句!
有关不同格式数字的列表,请参见这里。
发布于 2017-09-13 09:30:10
您可以使用TRY_CONVERT
和COALESCE
。如果转换失败,转换返回NULL,聚结返回第一个NOT NULL值:
SELECT COALESCE(TRY_CONVERT(DATETIME, x, 105), TRY_CONVERT(DATETIME, x, 120))
FROM (VALUES('25-10-2016'), ('2016-10-13')) a(x)
我假定值2016-10-13
是格式yyyy-MM-dd
。
您在评论中提到,您可能还有其他格式。在这种情况下,它变得非常棘手。如果您得到了一个值01-12-2017
,而您不知道格式,那么就无法用来判断这是januari的日期还是12月的日期。
https://stackoverflow.com/questions/46193539
复制相似问题