MySQL資料庫之函式
阿新 • • 發佈:2020-12-15
函式
數字類
獲取隨機數 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)