是否有像dated2的isdate()函数?

Vla*_*mir 6 t-sql datetime2 sql-server-2008 sql-server-2012

我知道有一个名为isdate()的函数来验证datetime列,但它只适用于smalldatetime和datetime类型.问题是:是否有类似的方法来验证sql server 2008和2012中的新数据类型datetime2?

Aar*_*and 13

在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');
Run Code Online (Sandbox Code Playgroud)

结果:

2012-02-02 13:42:55.2323623    NULL
Run Code Online (Sandbox Code Playgroud)

或者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);
Run Code Online (Sandbox Code Playgroud)

(结果相同.)

对不起,我对<2012年没有一个聪明的答案.我想,你可以说

SELECT ISDATE(LEFT('2012-02-02 13:42:55.2323623', 23));
Run Code Online (Sandbox Code Playgroud)

但那感觉很脏.

TRY_CONVERT有关MSDN上的MSDN
TRY_PARSE文档的文档