2012-10-05 57 views
0

我剛纔的問題是 - insert substring into new columnSQL我需要多個案件的一列

我有兩個情況下,我想在同一列運行。

第 -

SET [ref_id] = CASE 
WHEN CHARINDEX('-', [full_id]) = 4 
THEN SUBSTRING([full_id], 1, 3) ELSE NULL 

第二 -

SET [ref_id] = CASE 
WHEN CHARINDEX('ZZZ-', [full_id]) = 1 
THEN SUBSTRING([full_id], 5, 3) ELSE NULL 

[full_id]列數據格式主要是ABC-123D2-45FG67但有些事情是所有數字或前綴ZZZ-

如果數據只是我希望[ref_id]列的數字爲NULL。

如果數據前綴爲ZZZ-我希望跳過該部分。

如果數據不ZZZ-ABC-開始我要複製的ABC(在某些情況下,有AB-1234這應該是NULL)。

我的代碼工作正常,除了兩個字符串不能一起工作,並且當我分別運行它們時,它們會取消先前查詢的工作。

我如何可以同時運行,並用null最終只能像123456AB-1234

在格式數據謝謝你的幫助。

回答

0

這不僅僅是一個嵌套你的病例陳述(哈!)嗎?

SET [ref_id] = CASE WHEN CHARINDEX('ZZZ-', [full_id]) = 1 THEN SUBSTRING([full_id], 5, 3) ELSE 
    (CASE WHEN CHARINDEX('-', [full_id]) = 4 THEN SUBSTRING([full_id], 1, 3) ELSE NULL end) end 

編輯:刪除「else null」結束。認爲這樣更好。我沒有可供我測試的服務器。

+0

我試圖巢,但第一種情況後,它會給我的錯誤。現在就試試你的。 = D – weewa

+0

它給了我一個錯誤在這句話的結尾'錯誤的語法附近的關鍵字'ELSE''我認爲它的最後一個'ELSE' – weewa

+0

哇,試圖從()內刪除else null,但不是外。謝謝! – weewa

0

你想使用一個case語句此:

SET [ref_id] = CASE WHEN CHARINDEX('ZZZ-', [full_id]) = 1 
        THEN SUBSTRING([full_id], 5, 3) 
        WHEN CHARINDEX('-', [full_id]) = 4 
        THEN SUBSTRING([full_id], 1, 3) 
        ELSE NULL 
       END