2013-07-31 223 views

回答

14

其它所有的答案很可能也是工作,我建議嘗試使用STUFF功能可輕鬆更換的一部分串。

UPDATE Telephone 
SET number = STUFF(number,1,1,'') 
WHERE number LIKE '9%' 

SQLFiddle DEMO

2
UPDATE dbo.Telephone 
    SET column_name = SUBSTRING(column_name, 2, 255) 
    WHERE column_name LIKE '9%'; 
+0

我更喜歡RIGHT + LEN或STUFF方法,它假設長度永遠不是一個好主意。 – Aki

+0

@Aki你只需要使用列名永遠不會超過的長度 - 在這種情況下,你懷疑你的電話號碼需要超過255個字符,但也許你有不同的電話號碼格式,我不知道的。我不喜歡RIGHT + LEN,因爲參加LEN對我來說似乎是一種浪費和不必要的計算。 –

3
Update Telephone set number = RIGHT(number,LEN(number)-1) WHERE number LIKE '9%'; 
+0

對我來說,確定長度似乎是浪費。 –

4

下面是代碼和SQLFiddle

SELECT CASE 
WHEN substring(telephone_number, 1, 1) <> '9' 
    THEN telephone_number 
ELSE substring(telephone_number, 2, LEN(telephone_number)) 
END 
FROM Telephone 
+0

在你的'ELSE'中,起始位置應該是2,而不是1. 1是字符串的開始,所以輸出將仍然包含9. –

+0

是的,我嘗試了這個,並且在ELSE附近說錯誤 – w3n2u

+0

@AaronBertrand你'對了,謝謝你指出。 –

0
DECLARE @STR nvarchar(200) = 'TEST' 
SET @STR = STUFF(@STR,1,1,'') 
PRINT @STR 

結果將是 「EST」

0

東西是一個很好的功能。但是,將它與帶有where子句的更新語句一起使用是非常好的,但是如果我正在執行插入操作,並且我需要一次插入所有行。下面的內容將刪除第一個字符,如果它是一個句點,不使用較慢的case語句,並將nulls轉換爲空字符串。

DECLARE @Attachment varchar(6) = '.GIF', 
     @Attachment2 varchar(6) 

SELECT 
    @Attachment2 = ISNULL(ISNULL(NULLIF(LEFT(@Attachment, 1), '.'), '') + STUFF(@Attachment, 1, 1, ''), '') 

SELECT 
    @Attachment2 
相關問題