Sql转换日期使用确切的格式

时间:2014-12-24 07:32:09

标签: c# sql-server

在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或任何其他自定义功能。

2 个答案:

答案 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'

(观看双倍空格)

在对表的查询中,这看起来比这个单行表更少设计。