1. 程式人生 > 實用技巧 >MySQL資料庫之函式

MySQL資料庫之函式

函式

數字類

獲取隨機數 rand()

MariaDB [sel]> select rand();
+--------------------+
| rand()             |
+--------------------+
| 0.3974576679966018 |
+--------------------+
# `1 row in set (0.000 sec)`

隨機排序

MariaDB [sel]> select * from grades order by rand();
+-------+------+---------+------+
| name  | sex  | chinese | math |
+-------+------+---------+------+
| Tommy | boy  |      98 |   94 |
| Sunny | boy  |      93 |   96 |
| Jerry | boy  |      97 |   91 |
| Marry | girl |      95 |   94 |
+-------+------+---------+------+
# `4 rows in set (0.000 sec)`

隨機獲取一條記錄

MariaDB [sel]> select * from grades order by rand() limit 1;
+-------+------+---------+------+
| name  | sex  | chinese | math |
+-------+------+---------+------+
| Tommy | boy  |      98 |   94 |
+-------+------+---------+------+
# `1 row in set (0.000 sec)`

四捨五入 round()

MariaDB [sel]> select round(3.1415926,3) '四捨五入';
+----------+
| 四捨五入         |
+----------+
|    3.142 |
+----------+
# `1 row in set (0.008 sec)`

擷取資料 truncate()

  • 擷取資料直接擷取,不四捨五入
MariaDB [sel]> select truncate(3.1415926,3) '擷取資料';
+----------+
| 擷取資料  |
+----------+
|    3.141 |
+----------+
# `1 row in set (0.007 sec)`

向上取整 ceil()

MariaDB [sel]> select ceil(3.1415926) '向上取整';
+----------+
| 向上取整  |
+----------+
|        4 |
+----------+
# `1 row in set (0.007 sec)`

向下取整 floor()

MariaDB [sel]> select floor(3.1415926) '向下取整';
+----------+
| 向下取整  |
+----------+
|        3 |
+----------+
# `1 row in set (0.000 sec)`

字串類

大小寫轉換 ucase() lcase()

MariaDB [sel]> select ucase('i name is tom') '轉成大寫',lcase('My Name IS TOM') '轉成小寫';
+---------------+----------------+
| 轉成大寫       | 轉成小寫        |
+---------------+----------------+
| I NAME IS TOM | my name is tom |
+---------------+----------------+
# `1 row in set (0.008 sec)`

擷取字串 left() right() substring()

MariaDB [sel]> select left('sunflower',3) '從左擷取',right('sunflower',6) '從右擷取',substring('sunflower',4,9) '位置擷取';
+----------+----------+----------+
| 從左擷取  | 從右擷取  | 位置擷取 |
+----------+----------+----------+
| sun      | flower   | flower   |
+----------+----------+----------+
# `1 row in set (0.007 sec)`

字串相接 concat()

mysql> select concat('中國','北京','順義') '地址';
+--------------+
| 地址          |
+--------------+
| 中國北京順義   |
+--------------+
# `1 row in set (0.00 sec)`

mysql> select concat(stuname,'-',stusex) 資訊 from stuinfo;
+-------------+
| 資訊        |
+-------------+
| 張秋麗-男    |
| 李文才-男    |
| 李斯文-女    |
| 歐陽俊雄-男  |
| 諸葛麗麗-女  |
| 爭青小子-男  |
| 梅超風-女    |
+-------------+
# `7 rows in set (0.00 sec)`

資料判斷 coalesce(str1,str2)

  • 說明
    • 如果str1有值,顯示str1的值,如果str1沒有值,顯示str2的值
-- 將成績為空的顯示為缺考
mysql> select stuname,coalesce(writtenexam,'缺考'),coalesce(labexam,'缺考') from stuinfo natural left join stumarks;
+----------+------------------------------+--------------------------+
| stuname  | coalesce(writtenexam,'缺考') | coalesce(labexam,'缺考')  |
+----------+------------------------------+--------------------------+
| 張秋麗    | 77                          | 82                       |
| 李文才    | 50                          | 90                       |
| 李斯文    | 80                          | 58                       |
| 歐陽俊雄  | 65                          | 50                       |
| 諸葛麗麗  | 缺考                        | 缺考                      |
| 爭青小子  | 56                          | 48                       |
| 梅超風    | 缺考                        | 缺考                      |
+----------+------------------------------+--------------------------+
# `7 rows in set (0.02 sec)`

位元組長度 length()

MariaDB [sel]> select length('我愛北京天安門') 位元組長度;
+----------+
| 位元組長度  |
+----------+
|       14 |
+----------+
# `1 row in set (0.000 sec)`

字元長度 char_length()

MariaDB [sel]> select char_length('我愛北京天安門') 字元長度;
+----------+
| 字元長度  |
+----------+
|        7 |
+----------+
# `1 row in set (0.000 sec)`

時間類

時間戳 unix_timestamp()

MariaDB [sel]> select unix_timestamp() '時間戳';
+------------+
| 時間戳      |
+------------+
| 1606984955 |
+------------+
# `1 row in set (0.000 sec)`

格式化時間戳 from_unixtime(unix_timestamp())

MariaDB [sel]> select from_unixtime(unix_timestamp()) '格式化時間戳';
+---------------------+
| 格式化時間戳         |
+---------------------+
| 2020-12-03 16:43:50 |
+---------------------+
# `1 row in set (0.000 sec)`

獲取當前格式化時間 now()

MariaDB [sel]> select now() '當前時間';
+---------------------+
| 當前時間             |
+---------------------+
| 2020-12-03 16:49:05 |
+---------------------+
# `1 row in set (0.000 sec)`

獲取年月日時分秒 year(now()) month(now()) day(now()) hour(now()) minute(now()) second(now())

MariaDB [sel]> select year(now()) 年,month(now()) 月,day(now()) 日,hour(now()) 時,minute(now()) 分,second(now())秒;
+------+------+------+------+------+------+
| 年   | 月   | 日   | 時   | 分   | 秒    |
+------+------+------+------+------+------+
| 2020 |   12 |    3 |   16 |   53 |    6 |
+------+------+------+------+------+------+
# `1 row in set (0.000 sec)`

獲取星期 dayname(now())

MariaDB [sel]> select dayname(now()) '星期';
+----------+
| 星期     |
+----------+
| Thursday |
+----------+
# `1 row in set (0.000 sec)`

獲取本年第幾天 dayofyear(now())

MariaDB [sel]> select dayofyear(now()) '本年第幾天';
+------------+
| 本年第幾天          |
+------------+
|        338 |
+------------+
# `1 row in set (0.000 sec)`

日期相減 datediff(now(),'2021-01-01')

MariaDB [sel]> select datediff('2021-01-01',now()) '2020年剩餘天數';
+----------------+
| 2020年剩餘天數  |
+----------------+
|             29 |
+----------------+
# `1 row in set (0.000 sec)`

加密函式

md5() 加密

MariaDB [sel]> select md5('hello') 'MD5加密';
+----------------------------------+
| MD5加密                          |
+----------------------------------+
| 5d41402abc4b2a76b9719d911017c592 |
+----------------------------------+
# `1 row in set (0.000 sec)`

sha() 加密

MariaDB [sel]> select sha('hello') 'sha加密';
+------------------------------------------+
| sha加密                                  |
+------------------------------------------+
| aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d |
+------------------------------------------+
1 row in set (0.000 sec)