Sql-Server
Sql Statement 顯示多個真實的語句
我有一個 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 的結果CASE
是NULL
(WHEN
謂詞為假或未知),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]