Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

LEFT () so với SUBSTRING () trong SQL Server:Sự khác biệt là gì?

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()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 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 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tìm bảng chứa một cột cụ thể trong SQL Server

  2. SQL Server - Truy vấn ngắn mạch?

  3. Tìm hiểu Hệ điều hành SQL Server đang chạy (Ví dụ T-SQL)

  4. Có một Entity Framework 7 Database-First POCO Generator không?

  5. 4 cách chuyển đổi một số thành một phần trăm trong SQL Server (T-SQL)