Bài toán
Cắt chuỗi xuất hiện ở vị trí 1, 3 ngắn cách nhau bằng dấu chấm phẩy
Ý tưởng
Tìm ký tự xuất hiện lần lượt ở vị trí 1, 2. Sau đó dùng SubString để cắt ra chuỗi tương ứng.
Các hàm trong SQL Server
Hàm CharIndex
Hàm CharIndextrong SQL Server được sử dụng để tìm kiếm một chuỗi con bên trong một chuỗi lớn bắt đầu từ vị trí chỉ định. Hàm trả về kết quả là vị trí chuỗi con được tìm thấy hoặc trả về 0 nếu không tìm thấy. Vị trí chuỗi bắt đầu từ 1, không bắt đầu từ 0 như những trường hợp khác.
Lưu ý
CHARINDEX(substring, string, start)
Parameter | Description |
---|---|
substring | Required. The substring to search for |
string | Required. The string to be searched |
start | Optional. The position where the search will start (if you do not want to start at the beginning of string). The first position in string is 1 |
- Vị trí đầu tiên trong chuỗi là 1.
- Nếu không tìm thấy chuỗi con trong chuỗi, hàm CHARINDEX sẽ trả về 0.
Hàm SubString
Hàm SUBSTRING trong SQL Server cho phép bạn trích xuất một chuỗi con có độ dài được chỉ định bắt đầu từ một vị trí trong chuỗi đầu vào.SUBSTRING(string, start, length)
Parameter | Description |
---|---|
string | Required. The string to extract from |
start | Required. The start position. The first position in string is 1 |
length | Required. The number of characters to extract. Must be a positive number |
Giải quyết bài toán
Chúng ta thực hiện 3 bước:- Tạo temp table để chứa chuỗi cần cắt, và các column First, Second để lưu vị trí các dấu ;
- Cập nhật vị trí các dấu ;
- Cắt chuỗi và return trả về kết quả
DECLARE @s nvarchar(Max) = 'string1;string2;string3;string4;string5';
Create Table #tmp(
s nvarchar(max),
FirstSemicolon int,
SecondSemicolon int,
ThirdSemicolon int
)
Insert into #tmp(s)
Select @s;
Update tmp
SET tmp.FirstSemicolon = charindex(';', s)
FROM #tmp tmp
Update tmp
SET tmp.SecondSemicolon = charindex(';', s, tmp.FirstSemicolon +1)
FROM #tmp tmp
Update tmp
SET tmp.ThirdSemicolon = charindex(';', s, tmp.SecondSemicolon +1)
FROM #tmp tmp
Update tmp
SET tmp.s = SUBSTRING(s, 0, tmp.FirstSemicolon) +
SUBSTRING(s, tmp.SecondSemicolon , tmp.ThirdSemicolon - tmp.SecondSemicolon)
FROM #tmp tmp
SELECT * from #tmp
Drop Table #tmp;
Kết quả
string1;string3
Nhận xét
Đăng nhận xét