2013-07-31 5 views
5

Я в настоящее время есть таблица Telephone имеет записи, подобные следующим:Как удалить первый символ, если это определенный символ в SQL

9073456789101 
+773456789101 
0773456789101 

То, что я хочу сделать, это удалить только 9 с самого начала из всех записей, в которых есть 9, но оставляют остальных такими, какие они есть.

всякая помощь была бы принята с благодарностью.

ответ

14

Хотя все другие ответ, вероятно, также работает, я хотел бы предложить, чтобы попытаться использовать STUFF функцию легко заменить часть из строка.

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

SQLFiddle DEMO

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

Я предпочитаю метод RIGHT + LEN или STUFF, это предполагает длину, которая никогда не является хорошей идеей. – Aki

+0

@Aki вам просто нужно использовать длину, в которой имя столбца никогда не будет превышать - в этом случае вам вряд ли понадобится больше 255 символов для номера телефона, но, возможно, у вас разные форматы телефонных номеров, которые я не знаю из. Мне не нравится RIGHT + LEN, потому что принятие LEN кажется расточительным и ненужным вычислением для меня. –

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

Мне кажется, расточительно определять длину. –

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 
+0

В вашей «ELSE» начальная позиция должна быть 2, а не 1. 1 - начало строки, поэтому выход будет содержать 9. –

+0

Да, я пробовал это, и он говорил об ошибке рядом с ELSE – w3n2u

+0

@AaronBertrand You ' правильно, спасибо, что указали это. –

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

Результат будет "EST"

0

Материал является отличным функция для этого. Однако использование его с оператором update с предложением where отлично, но что делать, если я делаю вставку, и мне нужны все строки, вставленные за один проход. Ниже снижается первый символ, если он является периодом, не использует оператор более медленного случая и преобразует нули в пустую строку.

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

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

SELECT 
    @Attachment2