2014-03-12 63 views
8

我有一個數據庫列,並給它一個字符串,如,Recovery, Pump Exchange,如何替換SQL Server中列的第一個和最後一個字符?

我想從字符串中刪除第一個和最後一個逗號。

預期結果:。

+0

如果第一和最後一個逗號沒有在字符串存在,則因爲它是導致來。 –

+0

逗號分隔列表存儲在單個數據庫列中時會出現大量問題。從長遠來看,將*這些值存儲爲不同的行是*更好*。對於如何使用和操作這樣的設計不佳的列,SO中充滿了相同的重複問題。如果這不在你的控制範圍內,我感覺很糟糕,但是你正試圖解決一個問題,爲什麼不能一路走下去,並創建一個新的子表,並將每個值分開? –

回答

18

您可以使用SUBSTRING爲:

SELECT 
    SUBSTRING(col, 2, LEN(col)-2) 
FROM ... 

顯然,一個更好的辦法是不要把開頭和結尾逗號出現在首位,如果這是一個選項。

我想刪除最後和第一個逗號,除非存在否則不存在。

表達變得稍微複雜一些,但這個想法是一樣的:

SELECT SUBSTRING(
    col 
, CASE LEFT(@col,1) WHEN ',' THEN 2 ELSE 1 END 
, LEN(@col) -- Start with the full length 
      -- Subtract 1 for comma on the left 
     - CASE LEFT(@col,1) WHEN ',' THEN 1 ELSE 0 END 
      -- Subtract 1 for comma on the right 
     - CASE RIGHT(@col,1) WHEN ',' THEN 1 ELSE 0 END 
) 
FROM ... 
+0

我只想刪除最後和第一個逗號,如果存在其他明智的不是。 –

+0

@ManishSharma: - 那麼你可能想檢查bendataclear答案! –

+0

對不起,但我已經使用this.bu數據不能正常發佈,所以我想在我的問題下面發表評論。 –

0

嘗試這樣的:

if(Substring(@mykeyword, 1,1) = ',' and Substring(@mykeyword, LEN(@mykeyword) - 1, LEN(@mykeyword))=',') 
SET @mykeyword = Substring(@mykeyword, 2, LEN(@mykeyword) - 2) 
+0

但我如何在SQL quesry中使用這個請提供正確的查詢。 –

1

使用Substring()

SET @String=SUBSTRING(@String ,2,Len(@String)-2) 

SUBSTRING()返回部分o表達。

語法:

SUBSTRING (expression ,start , length) 
4

或者到dasblinkenlight的方法,你可以使用替換:

DECLARE @words VARCHAR(50) = ',Recovery, Pump Exchange,' 
SELECT REPLACE(','+ @words + ',',',,','') 
3

使用LEN可能會適得其反,因爲LEN忽略尾隨空格。由於ANSI_PADDING默認爲ON,因此可能會添加這些值。所以,你需要RTRIM。

爲了完整起見,我添加了LTRIM太...

REVERSE(SUBSTRING(REVERSE(RTRIM(LTRIM(SUBSTRING(MyCol, 2, 8000)))), 2, 8000)) 
0
SELECT LEFT(RIGHT(',Recovery, Pump Exchange,',LEN(',Recovery, Pump Exchange,')-1),LEN(',Recovery, Pump Exchange,')-2) 
相關問題