挖掘过去n年的数据时发生sql算术溢出错误

at0kjp5o  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(327)

我是sql新手。我试图从一个表中提取过去4年的数据,但我得到以下错误

SELECT * FROM fact.ClaimDetail WHERE EobPrintDateCode > DATEADD(year,-4,GETDATE())

Msg 8115, Level 16, State 2, Line 30
Arithmetic overflow error converting expression to data type datetime.

日期格式如下YYMMDD

df['EobPrintDateCode']
Out[89]: 
0    20060113
1    20060113
2    20060113
3    20060113
4    20060113

在执行select查询之前,是否需要将其转换为其他格式?请帮忙

i2loujxw

i2loujxw1#

如果日期代码是整数,则可以通过两个步骤将其转换为日期:

SELECT *
FROM fact.ClaimDetail
WHERE TRY_CONVERT(date, TRY_CONVERT(VARCHAR(255), EobPrintDateCode)) > DATEADD(year,-4, GETDATE())

您也可以使用仅对 GETDATE() . 再次假设一个整数:

WHERE EobPrintDateCode >= (YEAR(GETDATE()) - 4) * 10000 + MONTH(GETDATE()) * 100 + DAY(GETDATE())

因为你要减去4年,所以即使是闰年,日期算法也是这样。

uubf1zoe

uubf1zoe2#

可以使用cast将值转换为日期

SELECT *
FROM fact.ClaimDetail
WHERE cast(cast(EobPrintDateCode AS varchar(8)) AS date) > DATEADD(year,-4, GETDATE())
kzipqqlq

kzipqqlq3#

SELECT * 
FROM fact.ClaimDetail 
WHERE year(EobPrintDateCode) > year(getdate())-4;

相关问题