Sql server 无法构造数据类型date,某些参数的值无效
我的数据库中有一个日期,它不应该包括年份,因此我需要通过检查日期来构造正确的日期。(如果日期今年还未到,我想定在2017年,如果日期已经过去,我想定在2018年) (t.myDate是可为空的日期时间) 我如何发现数据质量问题,以及如何解决它Sql server 无法构造数据类型date,某些参数的值无效,sql-server,tsql,date,sql-server-2012,case,Sql Server,Tsql,Date,Sql Server 2012,Case,我的数据库中有一个日期,它不应该包括年份,因此我需要通过检查日期来构造正确的日期。(如果日期今年还未到,我想定在2017年,如果日期已经过去,我想定在2018年) (t.myDate是可为空的日期时间) 我如何发现数据质量问题,以及如何解决它 (我使用的是SQL Server 2012)除了检查空值之外,2月29日也可能有问题。例如,如果您有日期2016-02-29,并且您试图构建日期2017-02-29,您将得到上述错误,因为这不是一个有效的日期 通常,您可以使用游标在记录上循环,并在TRY/
(我使用的是SQL Server 2012)除了检查空值之外,2月29日也可能有问题。例如,如果您有日期
2016-02-29
,并且您试图构建日期2017-02-29
,您将得到上述错误,因为这不是一个有效的日期
通常,您可以使用游标在记录上循环,并在
TRY/CATCH
中执行逻辑。在异常情况下,您可以打印有问题的数据并检查问题所在。谢谢,我会尝试检查是否存在问题是的,它成功了!添加以下内容作为第一个CASE子句修复了它:WHEN(DATEPART(MONTH,t.myDate)=2和DATEPART(DAY,t.myDate)=29),然后DATEFROMPARTS('2018',DATEPART(MONTH,t.myDate),DATEPART(DAY,DATEADD(DAY,-1,t.myDate)))
SELECT
NewDate = CASE
WHEN DATEPART(dayofyear, GETDATE()) < DATEPART(dayofyear, t.myDate)
THEN DATEFROMPARTS('2017', DATEPART(MONTH,t.myDate), DATEPART(DAY, t.myDate))
ELSE DATEFROMPARTS('2018', DATEPART(MONTH,t.myDate), DATEPART(DAY,t.myDate))
END
FROM
MyTable t
SELECT
NewDate = CASE
WHEN t.myDate is null
THEN GETDATE()
WHEN DATEPART(MONTH,t.myDate) < 1
THEN GETDATE()
WHEN DATEPART(MONTH,t.myDate) > 12
THEN GETDATE()
WHEN DATEPART(DAY,t.myDate) < 1
THEN GETDATE()
WHEN DATEPART(DAY,t.myDate) > 31
THEN GETDATE()
WHEN ISDATE(t.myDate) = 0
THEN GETDATE()
WHEN DATEPART(dayofyear, GETDATE()) < DATEPART(dayofyear, t.myDate)
THEN DATEFROMPARTS('2017', DATEPART(MONTH,t.myDate), DATEPART(DAY, t.myDate))
ELSE DATEFROMPARTS('2018', DATEPART(MONTH,t.myDate), DATEPART(DAY,t.myDate))
END
FROM
MyTable t
WHERE t.myDate IS NOT NULL