MS SQL:ISDATE()在无法转换为日期时应返回"1"吗?

Elu*_*ros 2 sql sql-server type-conversion

大家,

在运行2012 SP3的SQL Server实例上,以下代码返回"1":

SELECT ISDATE('january,25,1999')
Run Code Online (Sandbox Code Playgroud)

但是,以下操作无法转换:

SELECT CAST('january,25,1999' AS DATE)

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.
Run Code Online (Sandbox Code Playgroud)

我误解ISDATE()应该返回什么?为什么ISDATE()为字符串返回值"1"?我们应该如何从SQL Server确定诸如"january,25,1999"之类的字符串是否可以作为日期输入?

谢谢!

Gor*_*off 5

忘了ISDATE()!您正在使用SQL Server 2012:

SELECT TRY_CONVERT(date, 'january,25,1999')
Run Code Online (Sandbox Code Playgroud)

NULL如果日期无法转换,这将返回- 我不认为这可以.您可以为要转换的特定格式指定第三个参数.

我会在SQL Server 2014中注意到一些事情:

SELECT TRY_CONVERT(date, 'january,25,1999')
Run Code Online (Sandbox Code Playgroud)

返回错误.

SELECT TRY_CONVERT(datetime, 'january,25,1999')
Run Code Online (Sandbox Code Playgroud)

成功.

我不知道为什么.但是你想要的是:

SELECT CONVERT(DATE, TRY_CONVERT(datetime, 'january,25,1999'))
Run Code Online (Sandbox Code Playgroud)