Chuyển đến nội dung chính

Hàm chuỗi trong SQL: Hướng dẫn cho người mới bắt đầu

Hiểu cách sử dụng các hàm chuỗi trong SQL để làm sạch và xử lý dữ liệu văn bản hiệu quả.
· 7 phút đọc

Khám phá cùng AI

Làm việc với cơ sở dữ liệu quan hệ thường liên quan đến việc xử lý dữ liệu lộn xộn. Một trong những thách thức phổ biến nhất là làm sạch và xử lý dữ liệu văn bản. May mắn là SQL cung cấp các hàm chuỗi mạnh mẽ có thể giúp quá trình này hiệu quả hơn rất nhiều, tiết kiệm thời gian và công sức cho bạn.

Trong bài viết này, chúng ta sẽ khám phá những hàm chuỗi SQL quan trọng nhất có thể giúp bạn làm sạch và thao tác dữ liệu văn bản một cách dễ dàng. Hãy bắt đầu nào!

Hàm chuỗi trong SQL là gì?

Hàm chuỗi trong SQL là các hàm dựng sẵn cho phép chúng ta thao tác và xử lý dữ liệu văn bản được lưu trong cơ sở dữ liệu. Ví dụ phổ biến của các trường văn bản bao gồm tên, mô tả và địa chỉ.

Các hàm này có thể được dùng để thực hiện nhiều tác vụ, bao gồm:

  • Nối chuỗi
  • Định dạng văn bản
  • Trích xuất một phần của chuỗi
  • Tìm kiếm và thay thế đoạn văn bản cụ thể trong một chuỗi

Nối chuỗi trong SQL

Chúng ta có thể nối hai hoặc nhiều chuỗi bằng hàm concat():

SELECT CONCAT('Street Roma',', ','72',', ','Padova') AS full_address

Đây là kết quả:

full_address           |
-----------------------+
Street Roma, 72, Padova|

Hàm này được dùng rộng rãi để kết hợp thông tin từ các cột khác nhau, như tên và địa chỉ.

Ngoài ra, bạn cũng có thể dùng hàm CONCAT_WS():

SELECT CONCAT_WS(',','Street Roma','72','Padova') as full_address

Từ cú pháp, bạn có thể nhận ra rằng cách này dễ và hiệu quả hơn trong các tình huống cần kết hợp nhiều hơn hai cột với cùng một ký tự phân tách.

Định dạng văn bản

Có một số hàm chuỗi SQL để điều chỉnh văn bản bằng cách đổi kiểu chữ, loại bỏ khoảng trắng thừa và các thao tác khác. Mỗi hàm được liệt kê kèm cú pháp và mô tả tương ứng.

Cú pháp hàm

Mô tả

LOWER(string)

Trả về văn bản với tất cả ký tự ở dạng chữ thường

UPPER(string)

Trả về văn bản với tất cả ký tự ở dạng chữ hoa

 TRIM(string, [character])

Mặc định loại bỏ khoảng trắng ở cả bên trái và bên phải của chuỗi; nếu chỉ định ký tự đặc biệt thì loại bỏ ký tự đó

LTRIM(string, [character])

Mặc định loại bỏ khoảng trắng ở bên trái của chuỗi; nếu chỉ định ký tự đặc biệt thì loại bỏ ký tự đó

RTRIM(string, [character])

Mặc định loại bỏ khoảng trắng ở bên phải của chuỗi; nếu chỉ định ký tự đặc biệt thì loại bỏ ký tự đó

Bây giờ, hãy xem một số ví dụ để hiểu cách áp dụng các hàm này. Hãy tưởng tượng bạn có địa chỉ email với ký tự viết hoa và mã quốc gia viết thường, và bạn muốn chỉnh lại định dạng cho đúng ở các cột này.

SELECT
		LOWER('[email protected]') AS email,
		UPPER('it') AS country

 Kết quả như sau:

email              |country|
-------------------+-------+
anonymous@gmail.com|IT     |

Bên cạnh việc đổi kiểu chữ, việc loại bỏ khoảng trắng ở đầu hoặc cuối chuỗi cũng hữu ích. Hàm chính cho kiểu thao tác này là TRIM() để loại bỏ ở cả hai phía. Các lựa chọn khác là LTRIM() và RTRIM() để lần lượt xóa khoảng trắng ở bên trái và bên phải:

SELECT  TRIM(' Street Roma, 72 ') AS trimmed_address,
	  LTRIM(' Street Roma, 72 ') AS ltrimmed_address,
	  RTRIM(' Street Roma, 72 ') AS rtrimmed_address

Truy vấn trả về kết quả sau:

trimmed_address|ltrimmed_address|rtrimmed_address|
---------------+----------------+----------------+
Street Roma, 72|Street Roma, 72 | Street Roma, 72|

Từ kết quả, bạn có thể thấy sự khác biệt giữa mỗi hàm. Hơn nữa, TRIM() có thể được dùng để loại bỏ các ký tự đặc biệt khác ngoài khoảng trắng. Ví dụ, chúng ta muốn làm sạch trường số điện thoại bằng cách bỏ dấu +:

SELECT TRIM('++345','+') AS telephone

Kết quả trả về như sau:

telephone|
---------+
345      |

Như bạn thấy, số điện thoại đã được làm sạch hoàn toàn.

Trích xuất văn bản

Sau khi nối và chỉnh định dạng chuỗi, đã đến lúc tìm hiểu cách trích xuất văn bản bằng hàm SQL đặc biệt SUBSTRING(). Hãy xem các ví dụ khác nhau để nắm vững hàm này:

SELECT
		SUBSTRING('Antony',1,1) AS first_character, 
		SUBSTRING('Antony',1,3) AS first_3characters,
		SUBSTRING('Antony',1,5) AS first_5characters

Đây là kết quả:

first_character|first_3characters|first_5characters|
---------------+-----------------+-----------------+
A              |Ant              |Anton            |

Chúng ta cũng có thể kết hợp hàm này với các hàm trước đó để viết hoa ký tự đầu tiên, chuyển các chữ cái còn lại thành chữ thường và sau đó nối tất cả lại:

SELECT
LENGTH('antony') AS lenght_name,
SUBSTRING(UPPER('antony'),1,1) AS first_character,
SUBSTRING(LOWER('antony'),2,LENGTH('antony')) AS  last_characters,
CONCAT(SUBSTRING(UPPER('antony'),1,1),SUBSTRING(LOWER('antony'),
      2,LENGTH('antony'))) AS name

Truy vấn này trả về kết quả sau:

lenght_name|first_character|LAST_characters|name  |
-----------+---------------+---------------+------+
          6|A              |ntony          |Antony|

Bên cạnh các hàm đã thấy đến giờ, bạn có thể để ý hàm LENGTH() giúp lấy độ dài của chuỗi. Trong ngữ cảnh này, nó hữu ích để xác định chỉ số của ký tự cuối cùng.

Tìm kiếm và thay thế chuỗi trong SQL

Chúng ta có thể điểm qua những hàm chính để tìm kiếm và thay thế chuỗi:

Cú pháp hàm

Mô tả

REPLACE(string,x,y)

Thay thế giá trị x trong chuỗi bằng giá trị y

CHARINDEX(x,string)

Tìm vị trí của giá trị x trong chuỗi

Một hàm rất hữu ích là REPLACE() để thay thế một chuỗi con bằng chuỗi con khác trong chuỗi:

SELECT
		'Street Roma - 32' AS address,
		replace('Street Roma - 32','-',',') AS cleaned_address

Đây là kết quả:

address         |cleaned_address |
----------------+----------------+
Street Roma - 32|Street Roma , 32|

Trong trường hợp này, chúng ta chỉ thay dấu gạch ngang bằng dấu phẩy trong địa chỉ. Chúng ta cũng có thể thử tìm vị trí của dấu gạch ngang trong địa chỉ:

SELECT
		'Street Roma - 32' AS address,
		LENGTH('Street Roma - 32') AS length_address,
		CHARINDEX('-','Street Roma - 32') AS location_dash

Truy vấn trả về kết quả sau:

address         |length_address|location_dash|
----------------+--------------+-------------+
Street Roma - 32|            16|           13|

Chúng ta có thể thấy ký hiệu - nằm ở vị trí 13 trong địa chỉ, gần cuối chuỗi.

Kết luận

Thành thạo các hàm chuỗi SQL này có thể tạo ra khác biệt trong việc làm sạch dữ liệu hiệu quả. Dĩ nhiên, bài viết không bao quát tất cả các hàm, mà chỉ là danh sách ngắn những hàm quan trọng nhất. Không phải mọi hàm SQL luôn hợp lệ và có thể thay đổi tùy theo loại cơ sở dữ liệu bạn đang dùng. Ví dụ, CHARINDEX có thể được thay bằng LOCATE() trong cơ sở dữ liệu MySQL. 

Để luyện tập các hàm này, bạn có thể xem khóa học Reporting in SQL của chúng tôi. Khóa học này có thể giúp bạn trở thành chuyên gia trong việc làm sạch dữ liệu và xây dựng báo cáo phức tạp. Chúng tôi cũng khuyến nghị lộ trình kỹ năng SQL Fundamentals để bao quát mọi khía cạnh thiết yếu của SQL.

Eugenia Anello

Tác giả

Eugenia Anello

Nhà khoa học dữ liệu - CRIF

Chủ đề

Liên quan