+7

Một số Functions hữu ích của MySQL

Query ra dữ liệu sau đó xử lý bằng ngôn ngữ lập trình thì cũng ngầu đấy nhưng bạn có biết MySQL cũng đã cung cấp cho chúng ta 1 số functions hữu ích này chưa?

CHARACTER_LENGTH

Thức ra thì nó cũng chỉ tương tự như

# 1 câu query
a = User.find_by name: "abc"
# cộng 1 function của ngôn ngữ lập trình
a.length

thì thay vào đó chúng ta sẽ viết

a = User.find_by(name: "abc").select(CHARACTER_LENGTH("users.name") AS name_length)
a.name_length

Hmm thực ra thì mình thấy viết kiểu MySql này còn dài hơn ấy 😃)) nhưng biết thêm 1 cái mới cũng hay mà.

FORMAT

Cách dùng thì giống CHARACTER_LENGTH nhé. Nhưng công dụng thì khác hoàn toàn nhé

FORMAT(number, decimal_places)

number: số chúng ta cần format
decimal_places: nghe tên thì chúng ta kiểu là vị trí của số thập phân nhưng các bạn cứ hiểu đơn giản là số chữ số thập phân được lấy thêm. Ví dụ

SELECT FORMAT(250500.5634, 2);
=> 250,500.56

TRIM

Loại bỏ khoảng trắng đầu cuối.
Cái này khá hay vì nếu bạn query ra 1 đối tượng Post và có trường content cần trim title ở nhiều nơi thì thay vì chỗ nào cũng phải post.content.strip dễ bị miss thì bạn có thể trim ngay ở câu truy vấn ví dụ như

SELECT TRIM('    SQL Tutorial    ') AS TrimmedString;
=> 'SQL Tutorial'

REPLACE

Công dụng của nó cũng giống gsub của ruby - Replace tất cả 1 ký tự hoặc đoạn string nào đó với ký tự hoặc đoạn string khác

SELECT REPLACE(string, from_string, new_string)

Ví dụ:

SELECT REPLACE("SQL Tutorial", "SQL", "HTML");
=> HTML Tutorial

GREATEST và LEAST

Trả về giá trị lớn nhất và nhỏ nhất. Ví dụ:

SELECT GREATEST(3, 12, 34, 8, 25);
=> 34
SELECT LEAST(3, 12, 34, 8, 25);
=> 3

DATE_FORMAT

Convert format của kiểu dữ liệu ngày tháng Ví dụ:

SELECT DATE_FORMAT("2017-06-15", "%Y");  
=> 2017

CASE

Cái này mình nghĩ thực sự mọi người nên biết vì nó, hỗ trợ mình rất nhiều trong những trường hợp select theo điều kiện oái ăm.
Ví dụ:

SELECT OrderID, Quantity,
  CASE 
      WHEN Quantity > 30 THEN 'The quantity is greater than 30'
      WHEN Quantity = 30 THEN 'The quantity is 30'
      ELSE 'The quantity is under 30'
  END AS QuantityText
FROM OrderDetails;
OrderID Quantity QuantityText
1 12 The quantity is under 30
2 40 The quantity is greater than 30
3 10 The quantity is under 30

CAST

Convert giá trị sang 1 kiểu dữ liệu cụ thể khác.
Ví dụ:

SELECT CAST("2017-08-29" AS DATETIME);
=> 2017-08-29 00:00:00

COALESCE

Trả về giá trị đầu tiên không bị Null

SELECT COALESCE(NULL, NULL, NULL, 'The', NULL, 'Thao');
=> The

IF

Quá quen rồi nhưng cú pháp của nó như này cơ

SELECT IF(condition, value_if_true, value_if_false)
# Giống trong excel nhỉ :))

Tổng kết

Đây là 1 số function mà bản thân mình nghĩ nó sẽ hữu ích (trong 1 đống các function có sẵn của MySQL). Hy vọng là nó cũng giúp ích cho mọi người (bow)


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí