程序員需掌握的SQL數學函數、字符串函數(四)

前言

MySQL 中的函數包括:數學函數、字符串函數、日期和時間函數、條件判斷函數、系統信息函數等,下面將介紹MySQL中這些函數的功能與用法。

1.數學函數

MySQL支持多種數學類型的函數,它們包括:絕對值函數、隨機函數等。下表列出了MySQL中經常使用的數組函數。

函數名稱 解釋說明
ABS (num) 返回num的絕對值
CEIL(num) 返回大於num的最小整數值
FLOOR(num) 返回小於num的最大正整數
MOD(num1,num2) 返回 num1 % num2 的值
RAND() 返回0-1的隨機數
TRUNCATE(num1,num2) 返回num1 截斷num2 位小數
ROUND(num1,num2) 返回參數num1的四捨五入帶有num2小數的值
POW(x,y) 返回x的y次方

1.1 ABS

下列顯示了對正數與負數的使用絕對值函數的結果。

mysql> mysql> select abs(-1.2),abs(1.2);
+-----------+----------+
| abs(-1.2) | abs(1.2) |
+-----------+----------+
|       1.2 |      1.2 |
+-----------+----------+
1 row in set (0.00 sec)

1.2 CEIL

CEIL(X) 返回一個比x大的最小整數

mysql> select ceil(1.6),ceil(1.2),ceil(-1.2);
+-----------+-----------+------------+
| ceil(1.6) | ceil(1.2) | ceil(-1.2) |
+-----------+-----------+------------+
|         2 |         2 |         -1 |
+-----------+-----------+------------+
1 row in set (0.00 sec)

1.3 FLOOR

FLOOR(x) 返回一個比x小的最大整數

mysql> select FLOOR(1.8),FLOOR(-1.8);
+------------+-------------+
| FLOOR(1.8) | FLOOR(-1.8) |
+------------+-------------+
|          1 |          -2 |
+------------+-------------+
1 row in set (0.00 sec)

1.4 MOD

MOD(x,y) 返回x%y的模

mysql> select mod(10,3);
+-----------+
| mod(10,3) |
+-----------+
|         1 |
+-----------+
1 row in set (0.00 sec)

1.5 RAND

RAND() 返回0-1 的隨機數

mysql> select rand();
+--------------------+
| rand()             |
+--------------------+
| 0.8903573117129107 |
+--------------------+
1 row in set (0.00 sec)

1.6 ROUND

round(x,y) 返回參數x的四捨五入的y位尾數

mysql> select round(1.23,2),round(1.67,2),round(1.44,2);
+---------------+---------------+---------------+
| round(1.23,2) | round(1.67,2) | round(1.44,2) |
+---------------+---------------+---------------+
|          1.23 |          1.67 |          1.44 |
+---------------+---------------+---------------+
1 row in set (0.00 sec)

1.7 TRUNCATE

TRUNCATE(x,y) 返回x截斷爲y位小數的結果

mysql> select round(1.23,2),round(1.67,2),round(1.44,2),truncate(1.23,2),truncate(1.67,2),truncate(1.44,2);
+---------------+---------------+---------------+------------------+------------------+------------------+
| round(1.23,2) | round(1.67,2) | round(1.44,2) | truncate(1.23,2) | truncate(1.67,2) | truncate(1.44,2) |
+---------------+---------------+---------------+------------------+------------------+------------------+
|          1.23 |          1.67 |          1.44 |             1.23 |             1.67 |             1.44 |
+---------------+---------------+---------------+------------------+------------------+------------------+
1 row in set (0.00 sec)

1.8 POW

POW(x,y) 返回x的y次方

mysql> select pow(2,3);
+----------+
| pow(2,3) |
+----------+
|        8 |
+----------+
1 row in set (0.00 sec)

MySQL同時也支持三角函數(正弦函數、餘弦函數、正切函數、餘切函數)、對數函數 ,一般在日常開發中使用到數學函數的場景幾乎沒有,一般我們都是在Java程序中處理好相關的數學計算後,在存儲到MySQL中。

2. 字符串函數

字符串函數是MySQL中最常見的函數,下面列出了常用的字符串函數:

2.1 CHAR_LENGTH與LENGTH

mysql> select char_length('abc');
+--------------------+
| char_length('abc') |
+--------------------+
|                  3 |
+--------------------+
1 row in set (0.00 sec)
mysql> select length('abc');
+---------------+
| length('abc') |
+---------------+
|             3 |
+---------------+
1 row in set (0.00 sec)

LENGTH(str) 返回字符串字節長度

mysql> select length('我');
+---------------+
| length('我')  |
+---------------+
|             3 |
+---------------+
1 row in set (0.00 sec)
mysql> select char_length('我');
+--------------------+
| char_length('我')  |
+--------------------+
|                  1 |
+--------------------+
1 row in set (0.00 sec)

2.2 CONCAT

CONCAT(s1,s2…) 將傳入的字符串進行拼接,需要注意的是任何與NULL進行拼接的字符串返回結果都爲NULL

mysql> select concat(1,'a'),concat(null,'a');
+---------------+------------------+
| concat(1,'a') | concat(null,'a') |
+---------------+------------------+
| 1a            | NULL             |
+---------------+------------------+
1 row in set (0.00 sec)

2.3 INSERT

INSERT(str,x,y,str1) 將str1 插入到str的x位置開始,y的位置結束

mysql> select insert('abc',1,2,'haha123');
+-----------------------------+
| insert('abc',1,2,'haha123') |
+-----------------------------+
| haha123c                    |
+-----------------------------+
1 row in set (0.00 sec)

2.4 LOWER 與UPPER

LOWER(str)、UPPER(str)函數:將字符串轉換成小寫或大寫:

mysql> select UPPER('abc'),LOWER('ABC');
+--------------+--------------+
| UPPER('abc') | LOWER('ABC') |
+--------------+--------------+
| ABC          | abc          |
+--------------+--------------+
1 row in set (0.00 sec)

2.5 LEFT 與 RIGHT

LEFT(str,x) 和 RIGHT(str,x) 函數分別返回字符串最左邊x個字符或最右邊x個字符

mysql> select LEFT('i love china,because i am a chinese',12),RIGHT('i love china,because i am a chinese',15);
+------------------------------------------------+-------------------------------------------------+
| LEFT('i love china,because i am a chinese',12) | RIGHT('i love china,because i am a chinese',15) |
+------------------------------------------------+-------------------------------------------------+
| i love china                                   |  i am a chinese                                 |
+------------------------------------------------+-------------------------------------------------+
1 row in set (0.00 sec)

2.6 REPLACE

REPLACE(str,s1,s2) 將str中包含是s1的字符序列替換爲s2

mysql> select replace('abc','ab','bb');
+--------------------------+
| replace('abc','ab','bb') |
+--------------------------+
| bbc                      |
+--------------------------+
1 row in set (0.01 sec)

2.7 TRIM

TRIM(str) 去掉字符串開頭、結尾的空格

mysql> select trim(' a bc ');
+----------------+
| trim(' a bc ') |
+----------------+
| a bc           |
+----------------+
1 row in set (0.00 sec)

2.8 SUBSTRING

SUBSTRING(str,x,y) 截取字符串str從x位置開始到y結束

mysql> select substring('abcd',1,1);
+-----------------------+
| substring('abcd',1,1) |
+-----------------------+
| a                     |
+-----------------------+
1 row in set (0.00 sec)

2.9 LOCATE、POSITION、INSTR

LOCATE(s,str)、POSITION(s in str)、INSTR(str,s) 這三個函數作用相同即返回字符串s在str的開始位置,需要注意三個函數之間的參賽順序

mysql> select locate('a','abc'),position('a' in 'abc'),instr('abc','a');
+-------------------+------------------------+------------------+
| locate('a','abc') | position('a' in 'abc') | instr('abc','a') |
+-------------------+------------------------+------------------+
|                 1 |                      1 |                1 |
+-------------------+------------------------+------------------+
1 row in set (0.00 sec)

2.10 REVERSE

REVERSE(str) 將字符串序列進行反轉

mysql> select REVERSE('abc');
+----------------+
| REVERSE('abc') |
+----------------+
| cba            |
+----------------+
1 row in set (0.00 sec)

2.11 FIELD

FIELD(s,s1,s2 …) 返回字符串s在s1、s2 …中第一次出現的位置,如若沒有則返回0。

mysql> select FIELD('a','ab','a');
+---------------------+
| FIELD('a','ab','a') |
+---------------------+
|                   2 |
+---------------------+
1 row in set (0.00 sec)

2.12 FIND_IN_SET

FIND_IN_SET(s1,s2) 返回字符串s1在字符串s2出現的位置,這一點與FIELD很類似,但是注意參數


mysql> select FIND_IN_SET('a','caba,aa,a');
+------------------------------+
| FIND_IN_SET('a','caba,aa,a') |
+------------------------------+
|                            3 |
+------------------------------+
1 row in set (0.00 sec)

下一篇我們將結束MySQL的時間函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章