SQL查找/忽略无效日期

时间:2017-06-20 12:13:51

标签: sql sql-server tsql date

我正在使用SQL Server。

从每行中,我从字段c.daybirth,c.monthbirth中获取日期和月份值 和来自getdate()的年份,我希望有一个字段显示此日期是否有效(无效示例:2月31日)

我创建了这个解决方案:

case day(dateadd(month,c.monthbirth-1,dateadd(day,c.daybirth-1,DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0)))) when c.daybirth then 1 else 0 end

有效,但我觉得很难读。有更聪明的选择吗?

1 个答案:

答案 0 :(得分:1)

在SQL Server 2012+中,您可以执行以下操作:

where try_convert(date,
                  datefromparts(year(getdate()), c.monthbirth, c.daybirth)
                 ) is not null

编辑:

好玩。这样更好:

where try_convert(date,
                  cast(year(getdate()) * 10000 + c.monthbirth * 100 + c.daybirth as varchar(255))
                 ) is not null