Hàm TRIM của SQL Server được thiết kế để loại bỏ các khoảng trắng ở đầu và cuối khỏi một chuỗi ký tự. Khoảng trắng ở đầu là khoảng trắng xuất hiện trước chuỗi thực. Một dấu cách xuất hiện sau.
Trong bài viết này, chúng ta sẽ xem xét hàm TRIM và minh họa cách sử dụng của nó bằng các ví dụ thực tế. Vì vậy, hãy bắt đầu từ những điều cơ bản.
Hàm TRIM trong SQL Server
SQL TRIM là một hàm tích hợp cho phép chúng ta cắt bớt các ký tự không cần thiết trên cả hai mặt của chuỗi bằng một thao tác. Thông thường, chúng tôi sử dụng nó để xóa khoảng trắng. Hàm này đã xuất hiện trong SQL Server 2017 và bây giờ nó cũng có trong Cơ sở dữ liệu Azure SQL.
Cú pháp của hàm TRIM trong SQL như sau:
TRIM (chuỗi [ký tự TỪ])
- ký tự FROM là một tùy chọn tham số xác định ký tự nào chúng ta nên xóa. Theo mặc định, tham số này áp dụng cho khoảng trắng ở cả hai bên của chuỗi của chúng tôi.
- chuỗi là một bắt buộc tham số xác định chuỗi mà chúng ta cần loại bỏ khoảng trắng / các ký tự không cần thiết khác.
Kết quả trả về là một chuỗi không có các ký tự mà chúng tôi đã xác định là được cắt bớt ở đầu và cuối. Xem ví dụ:
SELECT TRIM( ' example ') AS Result;
Đầu ra là:
ví dụ
Như chúng tôi đã đề cập, hàm TRIM cũng có thể xóa các ký tự khác. Hãy xem ví dụ mà chúng tôi muốn xóa chuỗi khỏi các ký tự và khoảng trắng không cần thiết:
SELECT TRIM( '.,# ' FROM '# ! example .') AS Result;
Đầu ra là:
! ví dụ
Hàm TRIM của SQL có sẵn trong SQL Server bắt đầu từ phiên bản 2017, nhưng nó cũng có thể thực hiện tác vụ trước bản phát hành đó. Người dùng có thể áp dụng SQL LTRIM và SQL RTRIM chức năng. Chúng có mặt trong tất cả các phiên bản SQL Server được hỗ trợ.
Hàm LTRIM trong SQL Server
SQL LTRIM hàm dùng để loại bỏ các khoảng trắng không cần thiết ở phía bên trái của chuỗi. Cú pháp như sau:
LTRIM (chuỗi)
chuỗi là tham số bắt buộc chỉ định chuỗi ký tự đích mà chúng ta cần cắt ở phía bên trái. Đầu ra là bản sao của chuỗi được chỉ định, nhưng không có khoảng trắng ở đầu:
SELECT LTRIM(' SQL Function');
Đầu ra:
'Hàm SQL'
Hàm RTRIM trong SQL Server
SQL RTRIM chức năng hoạt động theo cách giống như LTRIM - sự khác biệt là, nó loại bỏ khoảng trắng ở phía bên phải của chuỗi. Cú pháp như sau:
RTRIM (chuỗi)
chuỗi là tham số bắt buộc trỏ đến chuỗi ký tự mà chúng ta cần xóa dấu cách ở cuối.
SELECT RTRIM('SQL Server ');
Đầu ra:
‘Máy chủ SQL’
Sử dụng LTRIM và RTRIM cùng nhau
Làm việc với SQL Server, chúng ta thường chỉ cần xóa khoảng trắng khỏi một bên của chuỗi. Tuy nhiên, vẫn có những trường hợp khi chúng ta cần xóa chuỗi ở cả hai bên. Hàm TRIM mà chúng tôi đã mô tả trước đó phục vụ mục tiêu đó, nhưng như chúng tôi nhớ, nó chỉ khả dụng trong SQL Server 2017 trở lên.
Có cách nào để loại bỏ cả khoảng trống ở đầu và ở cuối cho một chuỗi mà không có hàm TRIM không? Đúng. Chúng ta có thể sử dụng LTRIM và RTRIM cùng nhau trong một truy vấn.
Cú pháp là:
LTRIM (RTRIM (chuỗi))
chuỗi xác định chuỗi ký tự đích mà chúng tôi muốn xóa khỏi các khoảng trắng không cần thiết ở cả hai bên. Cũng lưu ý rằng chúng tôi có thể đặt LTRIM và RTRIM theo bất kỳ thứ tự nào .
SELECT LTRIM(RTRIM(' SQL Server '));
Đầu ra:
‘Máy chủ SQL’
Bây giờ chúng ta đã làm rõ bản chất của tất cả các hàm SQL này (TRIM, LTRIM và RTRIM), hãy cùng tìm hiểu sâu hơn.
Tại sao Khoảng trắng lại quan trọng
Người ta có thể hỏi tại sao việc loại bỏ những khoảng trống như vậy lại quan trọng. Nói một cách dễ hiểu, đó là bởi vì chúng có thể gây phiền toái khi so sánh các giá trị chẳng hạn. Bản thân khoảng trắng được coi là một phần của chuỗi nếu nó ở đó, do đó, tốt hơn là bạn nên quan tâm đến những vấn đề như vậy.
Hãy kiểm tra các chức năng này một cách chính xác.
Đầu tiên, chúng tôi tạo một bảng đơn giản cho các loại cơ sở dữ liệu chạy trong doanh nghiệp của chúng tôi. Bảng của chúng tôi có ba cột. Đầu tiên là cột ID cần thiết để xác định từng hàng duy nhất. Địa chỉ thứ hai là DBTypeNameA . Cái thứ ba là DBTypeNameB .
Hai cột cuối cùng khác nhau theo kiểu dữ liệu. DBTypeNameA trước tiên sử dụng VARCHAR loại dữ liệu và DBTypeNameB sử dụng CHAR kiểu dữ liệu.
Đối với cả hai cột, chúng tôi phân bổ độ dài dữ liệu là 50.
- Listing 1: Create a Simple Table
USE DB2
GO
CREATE TABLE DBType (
ID INT IDENTITY(1,1)
,DBTypeNameA VARCHAR (50)
,DBTypeNameB CHAR (50))
GO
Lưu ý sự khác biệt giữa các kiểu dữ liệu này.
- Đối với cột VARCHAR, SQL Server không phân bổ không gian cho 50 ký tự mà chúng tôi mong đợi trong cột ab khởi đầu. Chúng tôi nói rằng cột này nên cung cấp tối đa gồm 50 ký tự, nhưng hãy phân bổ không gian nếu cần.
- Đối với cột CHAR, quy định đó được thực hiện cho 50 ký tự mỗi khi một hàng được chèn vào, bất kể giá trị thực có cần khoảng trống đó hay không.
Do đó, sử dụng VARCHAR (Ký tự biến) là một cách tiết kiệm không gian.
Sau khi tạo bảng, chúng tôi điền bảng tương tự bằng cách sử dụng mã trong Liệt kê 2.
-- Listing 2: Populate the Table
USE DB2
GO
INSERT INTO DBType VALUES ('SQL Server','SQL Server');
INSERT INTO DBType VALUES (' SQL Server ',' SQL Server ');
INSERT INTO DBType VALUES (' SQL Server ',' SQL Server ');
INSERT INTO DBType VALUES ('Oracle','Oracle');
INSERT INTO DBType VALUES (' Oracle ',' Oracle ');
INSERT INTO DBType VALUES (' Oracle ',' Oracle ');
INSERT INTO DBType VALUES ('MySQL','MySQL');
INSERT INTO DBType VALUES (' MySQL ',' MySQL ');
INSERT INTO DBType VALUES (' MySQL ',' MySQL ');
Trong khi điền bảng của chúng tôi, chúng tôi đã cố ý nhập các giá trị có dấu cách ở đầu và cuối. Chúng tôi sẽ sử dụng chúng trong cuộc trình diễn của mình.
Khi chúng tôi truy vấn bảng (xem Liệt kê 3), chúng tôi có thể thấy "sự biến dạng" trong dữ liệu khi được hiển thị trong SSMS (Hình 1).
-- Listing 3: Query the Table
USE DB2
GO
SELECT * FROM DBType;
Sự biến dạng này có thể nhìn thấy được bởi vì chúng ta có khoảng trống ở đầu. Theo cách này, dấu cách ở cuối khó hình dung hơn.
Truy vấn là Liệt kê 4 cung cấp một cái nhìn sâu hơn về “sự biến dạng” này. Nó giới thiệu các hàm LEN và DATALENGTH:
- LEN () trả về số ký tự trong một chuỗi không bao gồm dấu cách ở cuối.
- DATALENGTH () trả về số byte được sử dụng để biểu diễn một biểu thức.
-- Listing 4: Query the Table
USE DB2
GO
SELECT DBTypeNameA
, LEN(DBTypeNameA) LenVarcharCol
, DATALENGTH(DBTypeNameA) DataLenVarcharCol
, DBTypeNameB
, LEN(DBTypeNameB) LenCharCol
, DATALENGTH(DBTypeNameB) DataLenCharCol
FROM DBType;
Hình 2 cho chúng ta thấy các biến thể về độ dài cho các biểu thức như “SQL Server”, “Oracle” và “MySQL” do các khoảng trắng ở đầu và cuối.
Điều này ngụ ý rằng các biểu thức này không giống với công cụ truy vấn SQL Server. Chúng ta có thể thấy rõ điều này bằng cách chạy mã trong Liệt kê 5.
-- Listing 5: Query for Specific
USE DB2
GO
SELECT * FROM DBType WHERE DBTypeNameA='SQL Server';
SELECT * FROM DBType WHERE DBTypeNameA='Oracle';
SELECT * FROM DBType WHERE DBTypeNameA='MySQL';
DataLenCharCol trường đại diện cho đầu ra của hàm DATALENGTH () trên cột CHAR. Do đó, một hệ quả của sự chênh lệch này giữa “SQL Server” và “SQL Server” là kết quả truy vấn được hiển thị trong Hình 3.
Chúng tôi thấy rằng mặc dù chúng tôi có ba hàng với mỗi loại cơ sở dữ liệu, nhưng các truy vấn của chúng tôi chỉ trả về một trong mỗi loại vì các khoảng trống ở đầu và cuối phân biệt các giá trị.
Giải quyết vấn đề
Nhận được kết quả chính xác cho truy vấn trong Liệt kê 5 là khả thi và dễ dàng. Chúng ta cần hàm TRIM () của SQL Server như được hiển thị trong Liệt kê 6.
-- Listing 6: Query for Specific
USE DB2
GO
SELECT * FROM DBType WHERE TRIM(DBTypeNameA)='SQL Server';
SELECT * FROM DBType WHERE TRIM(DBTypeNameA)='Oracle';
SELECT * FROM DBType WHERE TRIM(DBTypeNameA)='MySQL';
Nếu không có hàm TRIM () này, chúng tôi có thể nhận được kết quả sai trong một số trường hợp.
Chúng tôi có thể thực hiện điều này xa hơn bằng cách tải dữ liệu vào một bảng riêng biệt, giả sử rằng chúng tôi muốn giải quyết vấn đề vĩnh viễn (một loại dữ liệu dọn dẹp).
-- Listing 7: Query for Specific
USE DB2
GO
SELECT ID, TRIM(DBTypeNameA) DBTypeNameA, TRIM(DBTypeNameB) DBTypeNameB FROM DBType;
So sánh kết quả của Liệt kê 7 (Hình 5) với kết quả của Liệt kê 3 (Hình 1). Chúng ta cũng có thể tạo một bảng khác với tập kết quả này để xóa dữ liệu (xem Liệt kê 8).
-- Listing 8: Create a New Table (Data Cleanup)
USE DB2
GO
SELECT ID, TRIM(DBTypeNameA) DBTypeNameA, TRIM(DBTypeNameB) DBTypeNameB INTO DBType_New FROM DBType;
SELECT * FROM DBType_New;
Bằng cách này, chúng tôi có thể giải quyết các vấn đề của mình vĩnh viễn và loại bỏ chi phí thực thi các chức năng mỗi khi chúng tôi cần trích xuất dữ liệu từ bảng của mình.
Kết luận
Các hàm TRIM () của SQL Server có thể được sử dụng để xóa cả dấu cách ở đầu và cuối khỏi chuỗi. LTRIM và RTRIM là hai biến thể của hàm này tập trung vào các khoảng trống ở đầu (LEFT) và ở cuối (RIGHT) tương ứng.
Chúng tôi có thể áp dụng TRIM () ngay lập tức để sắp xếp tập hợp kết quả và đảm bảo nhận được tập hợp kết quả chính xác. Ngoài ra, chúng tôi có thể sử dụng nó để xóa khoảng trắng trong khi di chuyển dữ liệu một cách gọn gàng từ bảng này sang bảng khác.
Các bài viết liên quan
Làm thế nào để phân tích cú pháp chuỗi giống như một chuyên gia bằng cách sử dụng hàm SUBSTRING () của SQL?