检查值是否为日期并进行转换

Inu*_*s C 11 sql sql-server sqldatetime

我在用 20120101 = YYYYMMDD

我以某种格式接收数据.日期是数字(8,0)
例如(0,1,2,3,6)

存在具有20120101 = YYYYMMDD该日期字段中的值的行,因此不是日期.

我想检查它是否是日期并转换它,否则它可以为null.

现在以下代码可以正常工作,但我希望有更好的方法.

(CASE WHEN [invoice_date] LIKE '________' --There are 8 underscores
 THEN convert(datetime, cast([invoice_date] as char(8)))
 END) AS Invoice_Date
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

Den*_*del 22

使用isdate函数如..

  (CASE WHEN ISDATE (invoice_date) = 1 
             THEN convert(datetime, cast([invoice_date] as char(8)))
             END) AS Invoice_Date
Run Code Online (Sandbox Code Playgroud)


von*_* v. 6

您可以使用ISDATE函数,但是对非日期值怎么办?在我建议的解决方案中,您可以选择返回null:

select 
    (case 
        when ISDATE (invoice_date)=1
        then convert(datetime, invoice_date)
    else null end) AS Invoice_Date
from your_table
Run Code Online (Sandbox Code Playgroud)