如何在SQL Server查询中确定特定日期的年龄

时间:2019-05-08 02:01:31

标签: sql sql-server oracle openquery

我在SQL Server查询中具有DD-MMM-YY格式的“出生日期”和“日期截止” DD-MM-YYYY格式。我必须根据“截至日期”的上述数据确定人员的年龄。我创建了以下逻辑以确定年龄。当我在oracle服务器上运行它时,它工作正常。

select 
    case 
       when trunc(months_between(TRUNC(TO_DATE('08-05-2019', 'dd-mm-yy')), to_date(CM.MMRBRY, 'DD-mm-YY')) / 12) > 0 
          then trunc(months_between(TRUNC(TO_DATE('08-05-2019', 'dd-mm-yy')), to_date(CM.MMRBRY, 'DD-mm-YY')) / 12)
          else (99 + trunc(months_between(TRUNC(TO_DATE('08-05-2019', 'dd-mm-yy')), to_date(CM.MMRBRY, 'DD-mm-YY')) / 12)) 
     end as AGE
 from 
     LIIL_SA.COMPRLMMR CM 

但是我需要使用Open Query从SQL Server调用此查询。当我使用下面的代码在SQL Server上的开放式查询中执行此操作时,出现错误。

set @Query = @Query + ' case when trunc(months_between(TRUNC(TO_DATE(''''' + @AsOnDate + ''''',''''dd-mm-yy'''')),to_date(CM.MMRBRY,''''DD-mm-YY''''))/12)>0 then     '
set @Query = @Query + '   trunc(months_between(TRUNC(TO_DATE(''''' + @AsOnDate + ''''',''''dd-mm-yy'''')),to_date(CM.MMRBRY,''''DD-mm-YY''''))/12) '
set @Query = @Query + '    else (99+trunc(months_between(TRUNC(TO_DATE(''''' + @AsOnDate + ''''',''''dd-mm-yy'''')),to_date(CM.MMRBRY,''''DD-mm-YY''''))/12)) end as AGE '

错误是:

  

链接服务器“ ASSURANCE”的OLE DB提供程序“ OraOLEDB.Oracle”返回消息“ ORA-01861:文字与格式字符串不匹配”。
  链接服务器“ ASSURANCE”的OLE DB提供程序“ OraOLEDB.Oracle”返回消息“ ORA-01861:文字与格式字符串不匹配。”

请帮助我解决此问题或提供其他方法来计算正确的年龄

0 个答案:

没有答案