2016-03-03 44 views
1

我需要更新SQL中的列以添加前導零。問題是這個列有幾種格式的數據。SQL查詢將前導0添加到列的一部分

0047 
0070-0336 
0025-0145 
0032-0008 
0033-0196 Johnson EEOC Matter 

我需要的最後4位數字前加一個零,或者更確切地說,只是之後的破折號,但只有有4位行 - 4位數的格式(4 -4加alpha)。因此,它看起來像:

0047 
0070-00336 
0025-00145 
0032-00008 
0033-00196 Johnson EEOC Matter 

我嘗試了好幾種UPDATE和權的發言,但不能得到的結果,我需要。

+0

只需編寫一些實現您的邏輯的函數,然後在您的UPDATE語句中調用該函數 –

+0

這就是糟糕的模式設計。 –

回答

1

未測試將失敗。請在執行之前對您的真實數據進行測試。

UPDATE yourTable 
SET col = SUBSTRING(col, 0, CHARINDEX('-', col)) 
    + '-0' + 
    SUBSTRING(col, CHARINDEX('-', col) + 1, LEN(col) - CHARINDEX('-', col)) 
WHERE col LIKE N'____-____%' 

此過濾器只用4個字符,然後-,其次是4個字符行,其次是什麼。它按以下方式設置列:將字符從0直到第一個-原樣,附加-0(而不是-),然後將其餘列的值附加原樣。

+0

litle解釋將成爲不錯 –

+0

@JuanCarlosOropeza編輯 –

+0

這個工作與第一案件? '0047' –

3

怎麼樣REPLACE

SELECT REPLACE(YourField, '-', '-0'); 
    FROM YourTable 

這將取代-

SELECT STUFF(YourField, CHARINDEX('-', YourField), 1, '-0') 

第一次出現,但如果你有這種情況下

0476  jhonso-jhonson 
+0

假設沒有其他 - 存在線(如約翰遜 - 約翰遜..),但應覆蓋95%+如果字符串中的第5個值是'-',則可能更傾向於案例,然後剩下5 + 0,然後是剩餘的sring – xQbert

+0

@xQbert你是對的,但這是非常簡單的,希望適用於OP –

+0

添加一個where len(替換(yourfield,' - ',''))= 1,然後手動處理其餘部分... – xQbert

0

可以使用下面的表達式:

SELECT IIF(CHARINDEX('-', @COL) <> 0, 
      STUFF(@COL, CHARINDEX('-', @COL), 1, '-0'), 
      @COL) 

4位的情況下 - 4位數,或4 -4加alpha格式,這將取代第一' - '用'-0'。

+0

你需要'IFF'嗎? –

+0

@JuanCarlosOropeza是的,測試'@COL ='0045'的情況。 –

+0

好的,將測試...現在我擔心這種情況下'0476 jhonso-jhonson' :( –