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

时间:2013-07-31 15:17:37

标签: sql sql-server sql-server-2008

我目前有一个表Telephone,它有如下条目:

9073456789101
+773456789101
0773456789101

我想要做的只是从那里有9个条目的所有条目的开头只删除9,但保留其他条目。

任何帮助将不胜感激。

7 个答案:

答案 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