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

o75abkj4  于 2023-02-15  发布在  其他
关注(0)|答案(8)|浏览(646)

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

9073456789101
+773456789101
0773456789101

我想要做的是从所有有9的条目中只删除开头的9,而让其他条目保持原样。
任何帮助都将不胜感激。

dfddblmv

dfddblmv1#

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

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

SQLFiddle演示

ovfsdjhp

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
agxfikkp

agxfikkp3#

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

omvjsjqw4#

我最近用RIGHT(),LEN()& PATINDEX()的组合解决了一个类似的问题。当PATINDEX发现第一个字符为9时,它将返回整数1,否则返回0。这个方法允许一次返回所有记录,而不需要CASE WHEN语句。

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

w6mmgewl5#

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

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
piv4azn7

piv4azn77#

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

结果将为“EST”

y1aodyip

y1aodyip8#

可以在select语句中使用replace代替where或update

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

相关问题