是否有像datedate2这样的函数?
我知道有一个称为isdate()来验证日期时间列的函数,但它只适用于smalldatetime和datetime类型。 现在的问题是:有没有类似的方式来验证sql server 2008和2012中的新数据类型datetime2?是否有像datedate2这样的函数?
在SQL Server 2012中,你可以使用TRY_CONVERT
:
SELECT TRY_CONVERT(DATETIME2, '2012-02-02 13:42:55.2323623'),
TRY_CONVERT(DATETIME2, '2012-02-31 13:42:55.2323623');
结果:
2012-02-02 13:42:55.2323623 NULL
或者TRY_PARSE
:(的结果相同)
SELECT TRY_PARSE('2012-02-02 13:42:55.2323623' AS DATETIME2),
TRY_PARSE('2012-02-31 13:42:55.2323623' AS DATETIME2);
对不起,我没有对你有一个聪明的答案< 2012年,你可以,我想,说
SELECT ISDATE(LEFT('2012-02-02 13:42:55.2323623', 23);
但是,感觉很脏。
TRY_CONVERT
documentation on MSDNTRY_PARSE
documentation on MSDN
不错的一个................ –
聪明的答案!我很喜欢它!另一个关于sql server 2008中的datetime2的问题是,有没有办法在1753年1月1日之前检查有效日期?使用此命令将会导致无效日期SELECT ISDATE(LEFT('2012-02-02 13:42:55.2323623',23)); – Vladimir
@Vladimir对不起,我现在才注意到你的问题。这是学术还是你真的有日期
严格地说ISDATE()不验证datetime列;它验证表达式是否可以解析为日期时间。它在一个专栏之后有点晚了! –
@MitchWheat这是一个很好的观点。似乎更可能验证(a)在varchar列中存储的日期不正确或(b)数据类型不正确的输入参数。 –
我想验证Excel表格中包含某些日期列的输入到临时表中。 – Vladimir