2010-05-03 66 views
0

爲什麼更換總是更換空值

left(FIELD, replace(nullif(charindex('-', FIELD), 0), null, len(FIELD))) 

總是返回null?查詢背後的想法是,如果charindex()返回0,則將結果轉換爲null,然後將null轉換爲該字段的長度。所以如果' - '不存在,則顯示整個字符串。出於某種原因,它使每行都等於null。

謝謝。

+0

你可以添加樣品的輸入和輸出嗎? – gbn 2010-05-03 19:03:37

回答

1

由於REPLACE()返回NULL,如果任何一個參數都是NULL。在文檔中這樣說。

而是執行此操作:

select isnull(nullif(charindex(' ',field),0),len(field)) 
0

所以,如果字段包含「 - 」,則顯示長度。如果沒有「 - 」,顯示字段?

CASE 
    WHEN FIELD NOT LIKE '%-% THEN FIELD 
    ELSE CAST(LEN (FIELD) AS varchar(4)) 
END 

你需要投以避免數據類型優先

翻轉,如果你想空字段不同的工作條件(它會去ELSE子句)

+1

我不確定OP在詢問什麼,但在ELSE情況的末尾需要另一個')'。 – 2010-05-03 19:32:24

+0

@KM:謝謝,糾正 – gbn 2010-05-03 19:35:03

0

當你說then convert the null into the length of the field,你的意思轉換成空值了一系列的空間,像這樣:

Select 
    Case 
    When Field Like '%-%' Then Replicate(' ', Len(Field)) 
    Else Field 
    End