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 2 3 4 5 | <span class="token comment"># 1 câu query</span> a <span class="token operator">=</span> <span class="token constant">User</span><span class="token punctuation">.</span>find_by name<span class="token punctuation">:</span> <span class="token string">"abc"</span> <span class="token comment"># cộng 1 function của ngôn ngữ lập trình</span> a<span class="token punctuation">.</span>length |
thì thay vào đó chúng ta sẽ viết
1 2 3 | a <span class="token operator">=</span> <span class="token constant">User</span><span class="token punctuation">.</span>find_by<span class="token punctuation">(</span>name<span class="token punctuation">:</span> <span class="token string">"abc"</span><span class="token punctuation">)</span><span class="token punctuation">.</span>select<span class="token punctuation">(</span><span class="token constant">CHARACTER_LENGTH</span><span class="token punctuation">(</span><span class="token string">"users.name"</span><span class="token punctuation">)</span> <span class="token constant">AS</span> name_length<span class="token punctuation">)</span> a<span class="token punctuation">.</span>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é
1 2 | <span class="token constant">FORMAT</span><span class="token punctuation">(</span>number<span class="token punctuation">,</span> decimal_places<span class="token punctuation">)</span> |
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ụ
1 2 3 | <span class="token keyword">SELECT</span> <span class="token function">FORMAT</span><span class="token punctuation">(</span><span class="token number">250500.5634</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">250</span><span class="token punctuation">,</span><span class="token number">500.56</span> |
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ư
1 2 3 | <span class="token keyword">SELECT</span> TRIM<span class="token punctuation">(</span><span class="token string">' SQL Tutorial '</span><span class="token punctuation">)</span> <span class="token keyword">AS</span> TrimmedString<span class="token punctuation">;</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token string">'SQL Tutorial'</span> |
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
1 2 | <span class="token keyword">SELECT</span> <span class="token keyword">REPLACE</span><span class="token punctuation">(</span>string<span class="token punctuation">,</span> from_string<span class="token punctuation">,</span> new_string<span class="token punctuation">)</span> |
Ví dụ:
1 2 3 | <span class="token keyword">SELECT</span> <span class="token keyword">REPLACE</span><span class="token punctuation">(</span><span class="token string">"SQL Tutorial"</span><span class="token punctuation">,</span> <span class="token string">"SQL"</span><span class="token punctuation">,</span> <span class="token string">"HTML"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token operator">=</span><span class="token operator">></span> HTML Tutorial |
GREATEST và LEAST
Trả về giá trị lớn nhất và nhỏ nhất. Ví dụ:
1 2 3 4 5 | <span class="token keyword">SELECT</span> GREATEST<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">34</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">34</span> <span class="token keyword">SELECT</span> LEAST<span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">34</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">25</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">3</span> |
DATE_FORMAT
Convert format của kiểu dữ liệu ngày tháng
Ví dụ:
1 2 3 | <span class="token keyword">SELECT</span> DATE_FORMAT<span class="token punctuation">(</span><span class="token string">"2017-06-15"</span><span class="token punctuation">,</span> <span class="token string">"%Y"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">2017</span> |
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ụ:
1 2 3 4 5 6 7 8 | <span class="token keyword">SELECT</span> OrderID<span class="token punctuation">,</span> Quantity<span class="token punctuation">,</span> <span class="token keyword">CASE</span> <span class="token keyword">WHEN</span> Quantity <span class="token operator">></span> <span class="token number">30</span> <span class="token keyword">THEN</span> <span class="token string">'The quantity is greater than 30'</span> <span class="token keyword">WHEN</span> Quantity <span class="token operator">=</span> <span class="token number">30</span> <span class="token keyword">THEN</span> <span class="token string">'The quantity is 30'</span> <span class="token keyword">ELSE</span> <span class="token string">'The quantity is under 30'</span> <span class="token keyword">END</span> <span class="token keyword">AS</span> QuantityText <span class="token keyword">FROM</span> OrderDetails<span class="token punctuation">;</span> |
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ụ:
1 2 3 | <span class="token keyword">SELECT</span> CAST<span class="token punctuation">(</span><span class="token string">"2017-08-29"</span> <span class="token keyword">AS</span> <span class="token keyword">DATETIME</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">2017</span><span class="token operator">-</span><span class="token number">08</span><span class="token operator">-</span><span class="token number">29</span> <span class="token number">00</span>:<span class="token number">00</span>:<span class="token number">00</span> |
COALESCE
Trả về giá trị đầu tiên không bị Null
1 2 3 | <span class="token keyword">SELECT</span> <span class="token keyword">COALESCE</span><span class="token punctuation">(</span><span class="token boolean">NULL</span><span class="token punctuation">,</span> <span class="token boolean">NULL</span><span class="token punctuation">,</span> <span class="token boolean">NULL</span><span class="token punctuation">,</span> <span class="token string">'The'</span><span class="token punctuation">,</span> <span class="token boolean">NULL</span><span class="token punctuation">,</span> <span class="token string">'Thao'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token operator">=</span><span class="token operator">></span> The |
IF
Quá quen rồi nhưng cú pháp của nó như này cơ
1 2 3 | <span class="token keyword">SELECT</span> <span class="token keyword">IF</span><span class="token punctuation">(</span>condition<span class="token punctuation">,</span> value_if_true<span class="token punctuation">,</span> value_if_false<span class="token punctuation">)</span> <span class="token comment"># Giống trong excel nhỉ :))</span> |
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)