如果第一个字符是SQL中的特定字符,如何删除

问题描述 投票:0回答:9
我目前有一个表

Telephone

它有如下条目:

9073456789101 +773456789101 0773456789101

我想要做的是只删除所有有 9 的条目开头的 9,但保留其他条目不变。

任何帮助将不胜感激。

sql sql-server sql-server-2008
9个回答
22
投票
虽然所有其他答案可能也有效,但我建议尝试使用

STUFF

 函数来轻松替换字符串的一部分。

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

SQLFiddle 演示


5
投票
这是代码和

SQLFiddle

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

5
投票
我最近结合使用 RIGHT()、LEN() 和 PATINDEX() 解决了类似的问题。当 PATINDEX 找到第一个字符为 9 时,将返回整数 1,否则返回 0。此方法允许一次返回所有记录,无需 CASE WHEN 语句。

SELECT RIGHT(number, LEN(number) - PATINDEX('9%', number)) FROM Telephone
    

4
投票
Update Telephone set number = RIGHT(number,LEN(number)-1) WHERE number LIKE '9%';
    

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

0
投票
Stuff 是一个很棒的功能。然而,将它与带有 where 子句的更新语句一起使用是很棒的,但是如果我正在执行插入操作,并且需要在一次传递中插入所有行,该怎么办?如果第一个字符是句点,下面的代码将删除它,不使用较慢的 case 语句,并将 null 转换为空字符串。

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

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

结果将为“EST”


0
投票
您可以在 select 语句中使用 Replace 来代替 where 或 update

SELECT REPLACE(REPLACE('_'+number,'_9',''),'_','') FROM @tbl
    

0
投票
您可以使用以下示例:

Declare @HearingTime Varchar(Max) = '09:00 AM' Declare @FirstDigit Varchar(1) Select @FirstDigit = SUBSTRING(@HearingTime, 1, 1) If (@FirstDigit = '0') Begin Select @HearingTime = Substring(@HearingTime, 2, LEN(@HearingTime)) End Select @HearingTime --9:00 AM
    
© www.soinside.com 2019 - 2024. All rights reserved.