簡體   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