Sql-Server

Sql Statement 顯示多個真實的語句

  • April 19, 2020

我有一個 sql 語句,它檢查字元串中的某些特殊字元並返回它。

SELECT

CASE
WHEN (LEN(DSC1) - CHARINDEX(char(1), DSC1)) <> LEN(DSC1) THEN '[DSC1 - NUL (null)], '
WHEN (LEN(DSC1) - CHARINDEX(char(2), DSC1)) <> LEN(DSC1) THEN '[DSC1 - SOH (start of heading)], '
WHEN (LEN(DSC1) - CHARINDEX(char(3), DSC1)) <> LEN(DSC1) THEN '[DSC1 - STX (start of text)], '

END  [Special Character]

下面的問題是,如果字元串有多個特殊字元,它只會列出第一個而不是另一個,因為我猜 case 語句一旦找到第一個匹配項就會中斷。

如何寫它列出了它找到的所有內容。例如,如果 DSC1 下的字元串同時具有 char(1) 和 char(2),那麼它將返回

特殊字元


$$ DSC1 - NUL (null) $$,$$ DSC1 - SOH (start of heading) $$,

您將需要單獨CASE的表達式,因為在滿足第一個條件後評估停止。

您可以使用CONCAT將所有表達式結果的值連接到單個列中。如果 a 的結果CASENULLWHEN謂詞為假或未知),CONCAT將返回一個空字元串作為值。

SELECT
   CONCAT(
       CASE WHEN (LEN(DSC1) - CHARINDEX(char(1), DSC1)) <> LEN(DSC1) THEN '[DSC1 - NUL (null)], ' END,
       CASE WHEN (LEN(DSC1) - CHARINDEX(char(2), DSC1)) <> LEN(DSC1) THEN '[DSC1 - SOH (start of heading)], ' END,
       CASE WHEN (LEN(DSC1) - CHARINDEX(char(3), DSC1)) <> LEN(DSC1) THEN '[DSC1 - STX (start of text)], ' END
       ) AS [Special Character]

引用自:https://dba.stackexchange.com/questions/265376