2011-07-29 56 views
0

從以下字符串中刪除第一個逗號的最佳方法是什麼?結果應該是「測試,E,呃,T」用於字符串操作的SQL函數

DECLARE @source VARCHAR(100) 
SET @source = ',TEST,e,er,t' 

編輯:什麼是去除所有領先的逗號最好的辦法,如果有不止一個逗號嗎?

感謝

Lijo

回答

3

我個人喜歡T-SQL's STUFF() function這個。其中一個主要的原因是,我沒有在意字符串可以持續多久,換出8000 4000如果是NVARCHAR等

SELECT STUFF(@source, 1, 1, ''); 

編輯新/更改的要求,我們可能需要畢竟使用字符串:

SELECT SUBSTRING(@source, PATINDEX('%[^,]%', @source), 8000); 

[注意,如果字符串包含只是逗號,這將返回所有逗號]

當然,你可以做到這一點與STUFF()還是:

SELECT STUFF(@source, 1, PATINDEX('%[^,]%', @source)-1, ''); 

但是,這將返回NULL爲一個字符串是所有逗號,所以如果NULL是不可取的,你可能想要將它包裝在COALESCE()中。

+0

我同意。還有一個問題,刪除所有主要逗號的最好方法是什麼? – Lijo

1

無需評估LEN ...

SUBSTRING(@source, 2, 8000) 
+0

你的意思是SELECT SUBSTRING(@source,2,LEN(@source))是通用的解決方案。但是,使用硬編碼值而不是使用LEN,對吧? – Lijo

+0

@Lijo:不,我的意思是使用8000.它不會在最後添加額外的空格,也不會改變長度。爲什麼評價LEN?它增加了什麼價值?如果你有尾隨空格,你會失去他們與LEN – gbn

0
DECLARE @source VARCHAR(100); 
SELECT @source = ',TEST,e,er,t'; 

SELECT @source = SUBSTRING(@source, 2, LEN(@source) - 1); 

,最好的辦法是,如果你可以利用的字符串是如何被建成這樣分隔符不會被放置在那裏。

+0

爲什麼評估LEN?它將刪除當然可能需要(或可能不需要)的尾隨空格...... – gbn

+0

可能很難控制字符串的構建 - 可能在其他應用程序中完成,可以使用FOR XML PATH '等 –

0

您可以使用STUFF

DECLARE @source VARCHAR(100); 
SELECT @source = ',TEST,e,er,t'; 

PRINT STUFF(@source,1,1,'')