试图从出生日期开始年龄

时间:2011-02-14 12:06:03

标签: sql-server-2005

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。

任何解决方案?

3 个答案:

答案 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)并检查。