Trong môi trường SQL Server, hai trong số nhiều hàm chuỗi mà chúng ta sử dụng là LEFT()
và SUBSTRING()
.
Các chức năng này thực hiện một điều tương tự, nhưng có sự khác biệt. Bài viết này xem xét một số điểm khác biệt chính giữa các chức năng này.
Defintion
Trước tiên, hãy xem mỗi chức năng làm gì:
-
LEFT()
- Trả về phần bên trái của chuỗi ký tự với số ký tự được chỉ định.
-
SUBSTRING()
- Trả về một phần của biểu thức ký tự, nhị phân, văn bản hoặc hình ảnh.
Vì vậy, LEFT()
chỉ trả về phần bên trái của chuỗi.
SUBSTRING()
chỉ cần trả về một phần của biểu thức (nó không chỉ giới hạn ở phần bên trái - nó có thể ở bên trái, bên phải hoặc ở đâu đó ở giữa).
Ví dụ 1 - Kết quả tương tự
Cả hai hàm đều có thể được sử dụng để trả về một số ký tự nhất định từ bên trái.
SELECT LEFT('Buckethead', 6) AS [LEFT], SUBSTRING('Buckethead', 1, 6) AS [SUBSTRING];
Kết quả:
+--------+-------------+ | LEFT | SUBSTRING | |--------+-------------| | Bucket | Bucket | +--------+-------------+
Tuy nhiên, LEFT()
ngắn gọn hơn. Điều này một phần là do tên hàm có ít ký tự hơn.
Nhưng đó cũng là do cú pháp. LEFT()
hàm chỉ yêu cầu hai đối số (biểu thức và số ký tự trả về), trong khi SUBSTRING()
yêu cầu ba đối số (biểu thức, vị trí bắt đầu và số ký tự để trả về từ vị trí bắt đầu đó).
Ví dụ 2 - Khi SUBSTRING tốt hơn
SUBSTRING()
tốt hơn nhiều so với LEFT()
lúc lấy dữ liệu từ giữa chuỗi. Trên thực tế, left không được thiết kế cho điều đó. Nếu bạn thực sự muốn sử dụng LEFT()
để làm điều này, bạn cần thực hiện một số thủ thuật, chẳng hạn như sử dụng RIGHT()
hoạt động như đối số đầu tiên của nó.
Ví dụ:
SELECT LEFT(RIGHT('Buckethead', 7), 3) AS [LEFT/RIGHT], SUBSTRING('Buckethead', 4, 3) AS [SUBSTRING];
Kết quả:
+--------------+-------------+ | LEFT/RIGHT | SUBSTRING | |--------------+-------------| | ket | ket | +--------------+-------------+
Các loại dữ liệu được chấp nhận
LEFT()
hàm không chấp nhận văn bản và ntext kiểu dữ liệu làm đối số đầu tiên của nó. Nó hỗ trợ tất cả các kiểu dữ liệu khác có thể được chuyển đổi thành varchar hoặc nvarchar .
SUBSTRING()
mặt khác, chấp nhận ký tự , nhị phân , văn bản , ntext và hình ảnh biểu thức.
Giá trị trả lại
LEFT()
trả về varchar khi đối số đầu tiên là kiểu dữ liệu ký tự không phải Unicode và nvarchar khi đó là kiểu dữ liệu ký tự Unicode.
Giá trị trả về cho SUBSTRING()
như sau:
Biểu thức (đối số đầu tiên) | Loại trả lại |
---|---|
char / varchar / văn bản | varchar |
nchar / nvarchar / ntext | nvarchar |
nhị phân / varbinary / hình ảnh | varbinary |