我目前有一个表Telephone,它包含如下条目:
Telephone
9073456789101 +773456789101 0773456789101
我想要做的是从所有有9的条目中只删除开头的9,而让其他条目保持原样。任何帮助都将不胜感激。
dfddblmv1#
虽然所有其他的答案可能也工作,我建议尝试使用STUFF函数来轻松地替换字符串的一部分。
STUFF
UPDATE Telephone SET number = STUFF(number,1,1,'') WHERE number LIKE '9%'
SQLFiddle演示
ovfsdjhp2#
下面是代码和SQLFiddle
SELECT CASE WHEN substring(telephone_number, 1, 1) <> '9' THEN telephone_number ELSE substring(telephone_number, 2, LEN(telephone_number)) END FROM Telephone
agxfikkp3#
Update Telephone set number = RIGHT(number,LEN(number)-1) WHERE number LIKE '9%';
omvjsjqw4#
我最近用RIGHT(),LEN()& PATINDEX()的组合解决了一个类似的问题。当PATINDEX发现第一个字符为9时,它将返回整数1,否则返回0。这个方法允许一次返回所有记录,而不需要CASE WHEN语句。
SELECT RIGHT(number, LEN(number) - PATINDEX('9%', number)) FROM Telephone
w6mmgewl5#
UPDATE dbo.Telephone SET column_name = SUBSTRING(column_name, 2, 255) WHERE column_name LIKE '9%';
7ajki6be6#
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
piv4azn77#
DECLARE @STR nvarchar(200) = 'TEST' SET @STR = STUFF(@STR,1,1,'') PRINT @STR
结果将为“EST”
y1aodyip8#
可以在select语句中使用replace代替where或update
SELECT REPLACE(REPLACE('_'+number,'_9',''),'_','') FROM @tbl
8条答案
按热度按时间dfddblmv1#
虽然所有其他的答案可能也工作,我建议尝试使用
STUFF
函数来轻松地替换字符串的一部分。SQLFiddle演示
ovfsdjhp2#
下面是代码和SQLFiddle
agxfikkp3#
omvjsjqw4#
我最近用RIGHT(),LEN()& PATINDEX()的组合解决了一个类似的问题。当PATINDEX发现第一个字符为9时,它将返回整数1,否则返回0。这个方法允许一次返回所有记录,而不需要CASE WHEN语句。
w6mmgewl5#
7ajki6be6#
Stuff是一个很好的函数。但是,将它与带有where子句的update语句一起使用是很好的,但是如果我正在执行插入操作,并且需要在一次传递中插入所有行,那么该怎么办?下面的代码将删除第一个字符(如果它是句点),不使用较慢的case语句,并将null转换为空字符串。
piv4azn77#
结果将为“EST”
y1aodyip8#
可以在select语句中使用replace代替where或update