繁体   English   中英

SQL 服务器中的CASE 多条件

[英]CASE in SQL Server with multiple conditions

我在 SQL 服务器上工作以生成一些结果。 我有两列, AuthDOB以及要考虑的三个条件:

  1. Auth 有 Y,然后 DOB 将有日期 pf 出生,没有任何特殊字符,格式为 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', 'NO') AND DATEDIFF(YEAR, 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, 1) = 'N'
                 AND DATEDIFF(YEAR, DOB, @TODAY) > 89 THEN '1900'
            ELSE ''
        END AS BIRTHDATE
FROM    dbo.children AS c;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM