微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL Server 中的 CASE 具有多个条件

如何解决SQL Server 中的 CASE 具有多个条件

我正在 sql Server 中工作以生成一些结果。我有两列,Authdob 以及三个需要考虑的条件:

  1. Auth 有 Y,那么 dob 的出生日期将没有任何特殊字符,格式为 yyyymmdd
  2. Auth 有 N 并且年龄小于等于 89 然后我们进入 dob
  3. Auth 有 N 并且年龄超过 89,然后我们就输入 1900 年

问题是因为我对 dob 使用 DATE 类型,它为第三个条件创建了一个问题,因为它仅采用 yyyy 格式。

这是我正在使用的代码

CASE 
   WHEN Auth IN ('Y','YES') 
      THEN CAST(REPLACE(dob,'-','') AS DATE)
   WHEN Auth IN ('N','NO') AND DATEDIFF(YEAR,dob@TODAY) <= 89 
      THEN YEAR(dob)
   WHEN Auth IN ('N',dob@TODAY) > 89 
      THEN '1900'
   ELSE '' 
END AS BIRTHDATE

任何人都可以帮助我如何处理案例本身吗?

解决方法

试试这个。看起来您在第二种情况下遇到了类型冲突,即返回 INT 数据类型。您的语句说第二个条件应该按原样返回 DOB,它应该是 VARCHAR 数据类型以与 CASE 语句的其他条件保持一致。

SELECT  CASE
            WHEN LEFT(Auth,1) = 'Y' THEN FORMAT(DOB,'yyMMdd')
            WHEN LEFT(Auth,1) = 'N'
                 AND DATEDIFF(YEAR,DOB,@TODAY) <= 89 THEN CAST(DOB AS VARCHAR)
            WHEN LEFT(Auth,@TODAY) > 89 THEN '1900'
            ELSE ''
        END AS BIRTHDATE
FROM    dbo.children AS c;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。