将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
我希望根据到达时的年龄将这些人归为一组,
答案 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>