大家,
在运行2012 SP3的SQL Server实例上,以下代码返回“1”:
SELECT ISDATE('january,25,1999')
但是,以下内容无法转换:
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.
我误解了ISDATE()应该返回的内容吗?为什么ISDATE()为字符串返回值“1”?我们应该如何从SQL Server确定诸如“january,25,1999”之类的字符串是否可以作为日期输入?
谢谢!
答案 0 :(得分:5)
忘记ISDATE()
!您正在使用SQL Server 2012:
SELECT TRY_CONVERT(date, 'january,25,1999')
如果日期无法转换,则会返回NULL
- 我不认为这可以。您可以为要转换的特定格式指定第三个参数。
我会在SQL Server 2014中注意到:
SELECT TRY_CONVERT(date, 'january,25,1999')
返回错误。
SELECT TRY_CONVERT(datetime, 'january,25,1999')
成功。
我不知道为什么。但是你想要的是什么:
SELECT CONVERT(DATE, TRY_CONVERT(datetime, 'january,25,1999'))
答案 1 :(得分:2)
您需要使用CONVERT而不是CAST来解析非标准字符串格式的日期。
SELECT CONVERT(datetime, 'january,25,1999')
将为您提供包含1999-01-25 00:00:00.000
的SQL Server日期时间答案 2 :(得分:0)
关于2008R2部分... 我发现ISDATE函数的问题是
-我的有效日期dd / mm / yy以char形式存储 选择ISDATE('dd / mm / yy')会返回零,除非您将其转换为日期
选择ISDATE(convert(date,'dd / mm / yy',103)..说
,但是结果是,当转换评估非日期字段时,这将返回错误。
解决方法是先运行
SET DATEFORMAT dmy; (假设这是proc的作用域,但可能不是吗?)
然后ISDATE('dd / mm / yy')应该返回1