2013-07-31 12 views

Odpowiedz

14

podczas gdy wszystkie inne odpowiedzi są prawdopodobnie również pracę, sugeruję, aby spróbować użyć STUFF funkcję łatwo zastąpić część strunowy.

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

Preferuję metodę RIGHT + LEN lub STUFF, to zakłada długość, która nigdy nie jest dobrym pomysłem. – Aki

+0

@Aki wystarczy użyć długości, której nazwa kolumny nigdy nie przekroczy - w tym przypadku wątpliwe jest, czy kiedykolwiek potrzebujesz więcej niż 255 znaków na numer telefonu, ale może masz różne formaty numerów telefonów, których nie jestem świadomy z. Nie lubię RIGHT + LEN, ponieważ zajęcie LEN wydaje mi się marnotrawną i niepotrzebną kalkulacją. –

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

Dla mnie wydaje się marnotrawstwo, aby określić długość. –

4

Oto kod i 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

W twoim "ELSE" pozycja początkowa powinna wynosić 2, a nie 1. 1 jest początkiem łańcucha znaków, więc dane wyjściowe będą nadal zawierać numer 9. –

+0

Tak, próbowałem tego i mówiłem błąd w pobliżu ELSE – w3n2u

+0

@AaronBertrand You ' w porządku, dzięki za wskazanie. –

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

Wynik będzie "EST"

0

Rzeczy jest wielka funkcja dla tego produktu. Jednak użycie go z instrukcją aktualizacji z klauzulą ​​where jest świetne, ale co jeśli robiłem wstawkę i potrzebowałem wszystkich wierszy wstawionych w jednym przebiegu. Poniższy fragment usunie pierwszy znak, jeśli jest kropką, nie używa instrukcji wolniejszego case i konwertuje wartości null na pusty ciąg znaków.

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

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

SELECT 
    @Attachment2