对个人的案例陈述返回错误答案

时间:2019-08-11 23:28:25

标签: sql

将Oracle sql转换为Tsql,并且此代码原本在其中,我的sql server studio认为这是错误的,所以我将其取出-我觉得这应该可行。它运行正常-但无论出生日期如何,它始终返回“ 18以上”,这是不正确的。有人可以告诉我我在做什么错吗?

我确实尝试过放回地板-但它不喜欢它。

,case 

when (cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int))  < 29
    then '0 to 28 days' 
when (cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int)>=29 
    and cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int) <4 )
    then '29 days to 3 years' 
when (cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int)>=4 
    and cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int)<6 )
    then '4 to 5 years' 

when (cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int) >=6 
    and cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int) <11 )
    then '6 to 10 years'
when (cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int) >=11 
    and cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int) <14 )
    then '11 to 13 years' 

when ( cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int)>=14 
    and cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int) <18  )
    then '14 to 17 years' 
when cast(fed.ADT_ARRIVAL_date - pat.BIRTH_DATE as int) >=18 
then '18 and above'     
else NULL
end age

我希望根据到达时的年龄将这些人归为一组,

1 个答案:

答案 0 :(得分:0)

如果我猜对了,那么您正在计算两个日期之间的日期差,其中考虑到MSSQL Server时存在一些语法问题。在MSSQL Server中,您可以如下计算日期差异-

CASE 
    WHEN DATEDIFF(DD,fed.ADT_ARRIVAL_date,pat.BIRTH_DATE) < 29
    -- Do not required CAST AS INT as it by default return INT
    .....
END

您也遇到了检查值的问题,因为我发现您正在检查相同的值> = 29 AND <4!任何时候都不能为TRUE。另外,我对您在几天到一年之间的年龄分布感到困惑,因为您正在检查的所有值都介于4到29之间。无论如何,我希望这些都是测试数据,并且可以通过MSSQL Server的正确DATEDIFF方法获得所需的输出。 / p>