我正在尝试使用以下语法将日期存储为datetime2的生日添加13年(dateadd(yy,13,isNull(cast(p.birthDTS as datetime),cast('1/1/1950') as datetime)))> = @ svcStart)
我得到为'datetime'列添加值导致溢出。
我搜索了最大值(p.birthDTS)并返回1988-10-17 00:00:00.0000000
我得到的@svcStart为2015-04-08 13:10:49.193
我有点沮丧。有什么帮助吗?
JB
答案 0 :(得分:1)
如果您使用DATETIME2
的值,则可能需要尝试将值转换为DATETIME2
,而不是DATETIME
:
DATEADD(yy,13,ISNULL(CAST(p.birthDTS AS DATETIME2),CAST('1/1/1950' AS DATETIME2)))
假设您没有任何无效数据或类似问题,并且您提供的示例数据是正确的(即最大值为1988-10-17
),这似乎正确为seen here:
我确保您仔细检查所有数据类型以确保它们按预期定义,并考虑再次查询数据以检查任何边缘情况(例如,最大值和最小值,可能的空值等)
答案 1 :(得分:0)
如果日期字段中的记录中的值不是有效日期,或者您为此值添加了一些月份或日期,并且其输出将超出日期范围,则可能会遇到此错误。