Sử dụng LEFT kết hợp với CHARINDEX:
UPDATE MyTable
SET MyText = LEFT(MyText, CHARINDEX(';', MyText) - 1)
WHERE CHARINDEX(';', MyText) > 0
Lưu ý rằng mệnh đề WHERE bỏ qua việc cập nhật hàng mà không có dấu chấm phẩy.
Dưới đây là một số mã để xác minh SQL trên công trình:
declare @MyTable table ([id] int primary key clustered, MyText varchar(100))
insert into @MyTable ([id], MyText)
select 1, 'some text; some more text'
union all select 2, 'text again; even more text'
union all select 3, 'text without a semicolon'
union all select 4, null -- test NULLs
union all select 5, '' -- test empty string
union all select 6, 'test 3 semicolons; second part; third part;'
union all select 7, ';' -- test semicolon by itself
UPDATE @MyTable
SET MyText = LEFT(MyText, CHARINDEX(';', MyText) - 1)
WHERE CHARINDEX(';', MyText) > 0
select * from @MyTable
tôi nhận được kết quả như sau:
id MyText
-- -------------------------
1 some text
2 text again
3 text without a semicolon
4 NULL
5 (empty string)
6 test 3 semicolons
7 (empty string)
Nguồn
2009-11-03 15:30:54
Điều gì sẽ xảy ra nếu MyText không chứa ';' tính cách? Trong trường hợp đó, bạn sẽ không sử dụng âm 1 như tham số thứ hai trong left(). Trong trường hợp đó, trên hộp của tôi, tôi gặp lỗi "Tham số chiều dài không hợp lệ được chuyển đến hàm chuỗi con." – Mike
@Mike Đó chính xác là vấn đề của tôi - Xem câu trả lời tiếp theo từ @najmeddine !! –
Câu trả lời của @Mike Rashlien dưới đây giải quyết vấn đề này: TRÁI (MyText + ';', CHARINDEX (';', MyText + ';') - 1) – Tim