簡體   English   中英

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

[英]How to remove the first character if it is a specific character in SQL

我目前有一個表Telephone它有如下條目:

9073456789101
+773456789101
0773456789101

我想要做的是從所有有 9 的條目的開頭只刪除 9,但保留其他條目。

任何幫助將不勝感激。

雖然所有其他答案可能也有效,但我建議嘗試使用STUFF函數來輕松替換字符串的一部分。

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

SQLFiddle 演示

這是代碼和SQLFiddle

SELECT CASE 
WHEN substring(telephone_number, 1, 1) <> '9'
  THEN telephone_number
ELSE substring(telephone_number, 2, LEN(telephone_number))
END
FROM Telephone
Update Telephone set number = RIGHT(number,LEN(number)-1) WHERE number LIKE '9%';
UPDATE dbo.Telephone 
  SET column_name = SUBSTRING(column_name, 2, 255)
  WHERE column_name LIKE '9%';

我最近用 RIGHT()、LEN() 和 PATINDEX() 的組合解決了一個類似的問題。 當 PATINDEX 找到第一個字符時,它會返回整數 1,否則返回 0。 此方法允許在沒有 CASE WHEN 語句的情況下立即返回所有記錄。

SELECT
    RIGHT(number, LEN(number) - PATINDEX('9%', number))
FROM Telephone
DECLARE @STR nvarchar(200) = 'TEST'
SET @STR = STUFF(@STR,1,1,'')
PRINT @STR

結果將是“EST”

東西是一個很好的功能。 但是,將它與帶有 where 子句的更新語句一起使用很棒,但是如果我正在執行插入操作,並且我需要在一次傳遞中插入所有行呢? 如果是句點,下面將刪除第一個字符,不使用較慢的 case 語句,並將空值轉換為空字符串。

DECLARE @Attachment varchar(6) = '.GIF',
        @Attachment2 varchar(6)

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

SELECT
  @Attachment2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM