SELECT [ID_KUNDNR]
,CASE
WHEN DA_FODELSEAR IS NULL THEN 0
WHEN dateadd(year, datediff (year, DA_FODELSEAR, getdate()), DA_FODELSEAR) > getdate() THEN datediff (year, DA_FODELSEAR, getdate()) - 1
ELSE datediff (year, DA_FODELSEAR, getdate())
END As Age
,[Catalog]
FROM Table
我得到了
Msg 8115,Level 16,State 2,Line 2 算术溢出错误转换 表达式到数据类型datetime。
任何解决方案?
答案 0 :(得分:1)
我只是想知道你为什么要使用案例。试试下面的内容,看看它是否有效。
SELECT [ID_KUNDNR] ,
datediff (year, 0, (getdate()-DA_FODELSEAR)) as Age,
Catalog
From Table
但是你再次确定DA_FODELSEAR的所有值都可以转换为datetime吗?
如果您遇到问题,请尝试此操作。
SELECT [ID_KUNDNR] ,
Case When ISDATE(DA_FODELSEAR) = 0 Then 0 Else
datediff (year, 0, (getdate()-DA_FODELSEAR))
End as Age,
Catalog
From Table
如果您想知道哪些行导致此转换问题,请选择'表格,其中IsDATE(DA_FODELSEAR)= 0'
答案 1 :(得分:0)
我认为你的问题在于dateadd(year, datediff(year, DA_FODELSEAR, getdate()), DA_FODELSEAR)
。您的DA_FODELSEAR
中的值不是DATETIME
格式。我会运行SELECT
语句来查找有问题的值。您正在检查NULL
但是空白区呢?
答案 2 :(得分:0)
您必须确保DA_FODELSEAR
的日期时间格式正确。您可以使用CAST(DA_FODELSEAR as DATETIME)
并检查。