我目前有一个表Telephone
,它有如下条目:
9073456789101
+773456789101
0773456789101
我想要做的只是从那里有9个条目的所有条目的开头只删除9,但保留其他条目。
任何帮助将不胜感激。
答案 0 :(得分:16)
虽然所有其他答案可能也有效,但我建议尝试使用STUFF
函数轻松替换字符串的一部分。
UPDATE Telephone
SET number = STUFF(number,1,1,'')
WHERE number LIKE '9%'
<强> SQLFiddle DEMO 强>
答案 1 :(得分: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
答案 2 :(得分:3)
Update Telephone set number = RIGHT(number,LEN(number)-1) WHERE number LIKE '9%';
答案 3 :(得分:2)
UPDATE dbo.Telephone
SET column_name = SUBSTRING(column_name, 2, 255)
WHERE column_name LIKE '9%';
答案 4 :(得分:1)
我最近通过将RIGHT(),LEN()和PATINDEX()组合使用来解决类似的问题。当找到第一个字符9时,PATINDEX将返回整数1,否则返回0。此方法允许立即返回所有记录,而无需使用CASE WHEN语句。
SELECT
RIGHT(number, LEN(number) - PATINDEX('9%', number))
FROM Telephone
答案 5 :(得分:0)
DECLARE @STR nvarchar(200) = 'TEST'
SET @STR = STUFF(@STR,1,1,'')
PRINT @STR
结果将是&#34; EST&#34;
答案 6 :(得分:0)
东西对此很有用。但是,将它与带有where子句的update语句一起使用是很好的,但是如果我正在进行插入操作,并且我需要在一次传递中插入所有行。如果它是句点,下面将删除第一个字符,不使用较慢的case语句,并将空值转换为空字符串。
DECLARE @Attachment varchar(6) = '.GIF',
@Attachment2 varchar(6)
SELECT
@Attachment2 = ISNULL(ISNULL(NULLIF(LEFT(@Attachment, 1), '.'), '') + STUFF(@Attachment, 1, 1, ''), '')
SELECT
@Attachment2