我目前有一个表Telephone
,其中包含如下条目:
9073456789101
+773456789101
0773456789101
我想要做的是从所有有 9 的条目的开头只删除 9,但让其他条目保持原样。
任何帮助将不胜感激。
我目前有一个表Telephone
,其中包含如下条目:
9073456789101
+773456789101
0773456789101
我想要做的是从所有有 9 的条目的开头只删除 9,但让其他条目保持原样。
任何帮助将不胜感激。
虽然所有其他答案可能也有效,但我建议尝试使用STUFF
函数来轻松替换字符串的一部分。
UPDATE Telephone
SET number = STUFF(number,1,1,'')
WHERE number LIKE '9%'
这是代码和SQLFiddle
SELECT CASE
WHEN substring(telephone_number, 1, 1) <> '9'
THEN telephone_number
ELSE substring(telephone_number, 2, LEN(telephone_number))
END
FROM Telephone
Update Telephone set number = RIGHT(number,LEN(number)-1) WHERE number LIKE '9%';
我最近使用 RIGHT()、LEN() 和 PATINDEX() 的组合解决了一个类似的问题。PATINDEX 将在找到第一个字符 9 时返回整数 1,否则返回 0。此方法允许在没有 CASE WHEN 语句的情况下一次返回所有记录。
SELECT
RIGHT(number, LEN(number) - PATINDEX('9%', number))
FROM Telephone
UPDATE dbo.Telephone
SET column_name = SUBSTRING(column_name, 2, 255)
WHERE column_name LIKE '9%';
Stuff 是一个很好的功能。但是,将它与带有 where 子句的 update 语句一起使用是很棒的,但是如果我正在执行插入操作,并且我需要一次插入所有行。如果它是句点,下面将删除第一个字符,不使用较慢的 case 语句,并将 null 转换为空字符串。
DECLARE @Attachment varchar(6) = '.GIF',
@Attachment2 varchar(6)
SELECT
@Attachment2 = ISNULL(ISNULL(NULLIF(LEFT(@Attachment, 1), '.'), '') + STUFF(@Attachment, 1, 1, ''), '')
SELECT
@Attachment2
DECLARE @STR nvarchar(200) = 'TEST'
SET @STR = STUFF(@STR,1,1,'')
PRINT @STR
结果将是“EST”