2013-07-31 17 views

Trả lời

14

Trong khi tất cả các câu trả lời khác có lẽ cũng làm việc, tôi muốn đề nghị để thử và sử dụng STUFF chức năng để dễ dàng thay thế một phần của chuỗi.

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

Tôi thích phương pháp RIGHT + LEN hoặc STUFF, giả định độ dài không bao giờ là ý tưởng hay. – Aki

+0

@Aki bạn chỉ cần sử dụng độ dài tên cột sẽ không bao giờ vượt quá - trong trường hợp này, bạn có thể cần nhiều hơn 255 ký tự cho số điện thoại, nhưng có thể bạn có các định dạng số điện thoại khác nhau mà tôi không biết của. Tôi không thích RIGHT + LEN vì việc sử dụng LEN dường như là một tính toán lãng phí và không cần thiết đối với tôi. –

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

Với tôi có vẻ như lãng phí để xác định độ dài. –

4

Đây là đoạn mã và một 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

Trong 'ELSE' của bạn, vị trí bắt đầu phải là 2, không 1. 1 là bắt đầu của chuỗi, vì vậy đầu ra sẽ vẫn bao gồm 9. ​​ –

+0

Có Tôi đã thử điều này và nó đã nói lỗi gần ELSE – w3n2u

+0

@AaronBertrand You ' lại đúng, cảm ơn vì đã chỉ ra nó. –

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

Kết quả sẽ là "EST"

0

Stuff là một chức năng lớn cho việc này. Tuy nhiên, việc sử dụng nó với một câu lệnh cập nhật với mệnh đề where là rất lớn, nhưng nếu tôi đã làm một chèn, và tôi cần tất cả các hàng được chèn vào trong một thẻ. Phần dưới sẽ loại bỏ ký tự đầu tiên nếu nó là một dấu chấm, không sử dụng câu lệnh case chậm hơn và chuyển đổi null thành một chuỗi rỗng.

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

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

SELECT 
    @Attachment2 
Các vấn đề liên quan