sql-server - Case when语句中的SQL转换错误

标签 sql-server compiler-errors null type-conversion

我正在尝试查看4个日期字段,然后选择最新的一个。一切正常,直到我没有任何东西进入一个 Realm 。然后我得到一个

"Conversion failed when converting date and/or time from character string." error.



有没有办法忽略空值?
Select AP.ID, AP.CERT_DATE as 'Cert Date', AP.Recert_Date as 'Recert Date', AP.Recert_Date2 as 'Recert Date 2', AP.Recert_Date3 as 'Recert Date 3',
CASE    
    When AP.CERT_DATE > AP.Recert_Date AND AP.CERT_DATE > AP.Recert_Date2 AND AP.CERT_DATE > AP.Recert_Date3 Then AP.CERT_DATE
    When AP.Recert_Date > AP.CERT_DATE AND AP.Recert_Date > AP.Recert_Date2 AND AP.Recert_Date > AP.Recert_Date3 Then AP.Recert_Date
    When AP.Recert_Date2 > AP.CERT_DATE AND AP.Recert_Date2 > AP.Recert_Date AND AP.Recert_Date2 > AP.Recert_Date3 Then AP.Recert_Date2
    When AP.Recert_Date3 > AP.CERT_DATE AND AP.Recert_Date3 > AP.Recert_Date AND AP.Recert_Date3 > AP.Recert_Date2 Then AP.Recert_Date3
    ELSE 'Attention'
END AS 'Most Recent Year'
FROM Profile AP

最佳答案

如果您使用的是SQL Server 2012或更高版本,则对开发人员更友好的方法是使用TRY_CONVERT,该方法可以检查(n)varchar是否表示特定格式的有效日期时间。

应用哈维尔的答案,您可以得到以下内容:

declare @minDate DATE = '19000101'

(SELECT Max(d) FROM (VALUES 
    (ISNULL(TRY_CONVERT(DATETIME, CERT_DATE), @minDate), 
    (Recert_Date), 
    (Recert_Date2), 
    (Recert_Date3)
) AS value(d)) as 'Most Recent Year'

(仅将TRY_CONVERT应用于varchars)

但是,如果可能,请尝试使所有日期列的类型为DATEDATETIME2,而不是VARCHAR

关于sql-server - Case when语句中的SQL转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36703028/

相关文章:

sql - 如何获取列中多条记录的总和

javascript - 为什么有时在使用变量之前将 'null' 分配给它

c# - XPath 查询总是仅对 SingleNodeSelect 中的某些查询返回 NULL

sql - 没有连接的插入语句会导致先前不存在重复项的重复项?

sql - 使用子句 IF 和 IN 获取值

c# - System.Data.dll 中发生类型为 'System.Data.SqlClient.SqlException' 的异常

c++ - 错误调用函数无法转换类型

compiler-errors - SpriteKit Swift3接触了SKNode

java - 必需的: variable Found:value Error Java Text-Based Calculator

javascript - 如何在 vue.js 模板中显示空格而不是 undefined 和 null?