[英]Select case not working as expected
我在select語句中有這個非常簡單的情況
CASE WHEN PHONENR IS NOT NULL THEN '+46'+PHONENR ELSE ' ' END AS Phone
我的問題在這里我可以正確地在所有現有數字前面添加國家代碼,但空行的默認值為+46而不是空
您可以使用
CASE WHEN PHONENR <> '' THEN '+46'+PHONENR ELSE ' ' END AS Phone
僅當PHONENR不為空或空字符串時才輸入第一個分支。
請改用LEN
CASE WHEN LEN(PHONENR)>1 THEN ....
我建議尋找除了空格之外的值,並將國家代碼添加到這些值。 像這樣的東西:
(case when phonenr like '%[^ ]%' then '+46' + PHONENR
else ''
end)
也就是說,如果電話號碼包含非空格字符,則附加國家/地區代碼。
您甚至可以更進一步,只有當電話號碼至少有一位數時才附加國家/地區代碼:
(case when phonenr like '%[0-9]%' then '+46' + PHONENR
else ''
end)
讓我更進一步。 將數據放入數據庫時,可以使用check
約束來驗證數據。 我會建議一個檢查約束來驗證電話號碼的結構 - 比如,它只包含一組字符或NULL
值:
alter table add constraint chk_phonenr check (phonenr not like '%[^-0-9()+ ]%' and phonenr like '%[0-9]%')
這將確保該字段具有合理的值或NULL
。 如果您有此約束,則原始查詢將起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.