在SQL 2014中,以下查询可以正常工作。
select Convert(datetime, 'JAN 13 2014 1:14:00:000PM', 109)
select Convert(datetime, '13 JAN 2014 1:14:00:000PM', 109)
根据documentation,109代表foramt'mon dd yyyy hh:mi:ss:mmmAM(或PM)'作为输入/输出。
如果未提供预期格式,我如何确保SQL必须失败。在上面的示例中,第二个查询必须失败。我不想去CLR或任何其他自定义功能。
答案 0 :(得分:2)
convert函数中的style参数(109)仅在从datetime转换为string时使用,如您提供的链接中所规定。 转换为datetime时,样式参数(109)无效...
此查询也适用于SQL,因为转换为日期时会忽略style参数。
select Convert(datetime, 'JAN 13 2014 1:14:00:000PM', 234234)
select Convert(datetime, '13 JAN 2014 1:14:00:000PM', 234234)
如果您需要字符串' 2014年1月13日1:14:00:000PM'要失败,你必须做一个手动检查。类似......
DECLARE @DateToCheck VARCHAR(30) = '13 JAN 2014 1:14:00:000PM'
SELECT
CASE
WHEN ISNUMERIC(LEFT(@DateToCheck, 2)) = 1 THEN 0
ELSE ISDATE(@DateToCheck)
END
希望有所帮助。
答案 1 :(得分:0)
检查反向转换是否为相同的值:
SELECT (select Convert(datetime, 'JAN 13 2014 1:14:00:000PM') as mydate)
WHERE Convert(nvarchar, Convert(datetime, 'JAN 13 2014 1:14:00:000PM'), 109)
= 'JAN 13 2014 1:14:00:000PM'
(观看双倍空格)
在对表的查询中,这看起来比这个单行表更少设计。