爲什麼更換總是更換空值
left(FIELD, replace(nullif(charindex('-', FIELD), 0), null, len(FIELD)))
總是返回null?查詢背後的想法是,如果charindex()返回0,則將結果轉換爲null,然後將null轉換爲該字段的長度。所以如果' - '不存在,則顯示整個字符串。出於某種原因,它使每行都等於null。
謝謝。
爲什麼更換總是更換空值
left(FIELD, replace(nullif(charindex('-', FIELD), 0), null, len(FIELD)))
總是返回null?查詢背後的想法是,如果charindex()返回0,則將結果轉換爲null,然後將null轉換爲該字段的長度。所以如果' - '不存在,則顯示整個字符串。出於某種原因,它使每行都等於null。
謝謝。
由於REPLACE()返回NULL,如果任何一個參數都是NULL。在文檔中這樣說。
而是執行此操作:
select isnull(nullif(charindex(' ',field),0),len(field))
所以,如果字段包含「 - 」,則顯示長度。如果沒有「 - 」,顯示字段?
CASE
WHEN FIELD NOT LIKE '%-% THEN FIELD
ELSE CAST(LEN (FIELD) AS varchar(4))
END
你需要投以避免數據類型優先
翻轉,如果你想空字段不同的工作條件(它會去ELSE子句)
我不確定OP在詢問什麼,但在ELSE情況的末尾需要另一個')'。 – 2010-05-03 19:32:24
@KM:謝謝,糾正 – gbn 2010-05-03 19:35:03
當你說then convert the null into the length of the field
,你的意思轉換成空值了一系列的空間,像這樣:
Select
Case
When Field Like '%-%' Then Replicate(' ', Len(Field))
Else Field
End
你可以添加樣品的輸入和輸出嗎? – gbn 2010-05-03 19:03:37