文章目錄
前言
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的時間函數。