2013-07-31 189 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 
相关问题