15

我目前有一个表Telephone,其中包含如下条目:

9073456789101
+773456789101
0773456789101

我想要做的是从所有有 9 的条目的开头只删除 9,但让其他条目保持原样。

任何帮助将不胜感激。

4

7 回答 7

22

虽然所有其他答案可能也有效,但我建议尝试使用STUFF函数来轻松替换字符串的一部分。

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

SQLFiddle 演示

于 2013-07-31T15:52:03.713 回答
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
于 2013-07-31T15:25:19.390 回答
3
Update Telephone set number = RIGHT(number,LEN(number)-1) WHERE number LIKE '9%';
于 2013-07-31T15:23:05.867 回答
3

我最近使用 RIGHT()、LEN() 和 PATINDEX() 的组合解决了一个类似的问题。PATINDEX 将在找到第一个字符 9 时返回整数 1,否则返回 0。此方法允许在没有 CASE WHEN 语句的情况下一次返回所有记录。

SELECT
    RIGHT(number, LEN(number) - PATINDEX('9%', number))
FROM Telephone
于 2020-02-25T16:57:26.223 回答
2
UPDATE dbo.Telephone 
  SET column_name = SUBSTRING(column_name, 2, 255)
  WHERE column_name LIKE '9%';
于 2013-07-31T15:22:41.267 回答
0

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
于 2016-04-28T22:51:37.090 回答
0
DECLARE @STR nvarchar(200) = 'TEST'
SET @STR = STUFF(@STR,1,1,'')
PRINT @STR

结果将是“EST”

于 2015-11-05T04:30:26.367 回答