MySQL基本函数
MySql基本函数
数值函数
ROUND(a, b)
:对数值a,保留b位小数CEILING(a)
:对数值a向上取整FLOOR(a)
:对数值a向下取整ABS(a)
:对数值a取绝对值RAND()
:取得0-1间的随机值
字符串函数
1 | SELECT strFunction(); |
LENGTH(str)
:得到字符串str的长度UPPER(str)
:将字符串str全部转换成大写LOWER(str)
:全转小写L/RTRIM(str)
:移除字符串左/右边的空格或预设字符Trim(str)
: 删除字符串左右所有空格或于定义字符LEFT/RIGHT(str, num)
:取出从左边/右边开始的num个字符
1 | SELECT LEFT('Kindergarten', 4) -- Kind |
SUBSTRING(str, num1, num2)
:字符截取函数,num1代表起始位置(包含在内),num2代表长度,如果num2参数没赋值,那么默认获取从起始位置一直到字符串结束位置的字符。
1 | SELECT SUBSTRING('Kindergarten', 1, 4) -- Kind |
LOCATE(target_str, str)
:搜索str里的target_str,返回从左往右,target_str第一次出现在str的位置下标,搜索不区分大小写。如果target_str不存在str里,则返回0。
1 | SELECT LOCATE('garten', ''Kindergarten'') --7 |
REPLACT(str, target_str, replace_str)
:替换一个字符或者字符串。从str里查找要替换的target_str,替换成replace_str。
1 | SELECT REPLACE('Kindergarten', 'garten', 'garden') -- 'Kindergarden' |
CONCAT(str1, str2)
:用来串联str1,str2两个字符串。
1 | SELECT CONCAT('Hakim ', 'Jabari') -- Hakim Jabari |
日期函数
1 | SELECT dateFunction(); |
NOW()
:获取电脑上当前的日期时间1
SELECT NOW(); --2021-04-04 09:31:48
CURDATE
:获取电脑上当前日期1
SELECT CURDATE(); --2021-04-04
CURTIME
:获取当前时间1
SELECT CURTIME(); -- 09:34:00
YEAR/DAY/MONTH/HOUR/MINUTE/SECOND(function())
:提取获取到的当前日期的年份/日期/月份/小时/分钟/秒1
2
3
4
5SELECT YEAR(NOW()),
MONTH(NOW()),
DAY(NOW()),
MINUTE(NOW()),
SECOND(NOW()); -- 用NOW能够提取时分秒,因为NOW返回的时间就有时分秒DAYNAME(FUNCTION())
:返回字符串格式的星期数1
2SELECT DAYNAME(NOW()),
MONTHNAME(NOW());EXTRACT()
:它是sql标准语言的一部分,适用于其他DBMS,可以提取指定的1
SELECT EXTRACT(YEAR FROM NOW()); -- 2021
格式化日期和时间
DATE_FORMAT(date, format_str)
:date是日期值,format_str是格式字符串。1
2
3
4
5
6
7
8
9
10
11
12-- SELECT DATE_FORMAT(NOW(),'%M %d %Y') -- April 05 2021
-- SELECT DATE_FORMAT(NOW(),'%H:%i %p') -- 08:34 AM
-- str_format params
-- %y:获得年份的后两位 21
-- %m:获得月份的后两位 04
-- %d:获得日期 05
-- %i:获得当前分钟值 33
-- %p:获得pm或者am AM
-- %Y:获得年份值 2021
-- %M:获得字符月份值 April
-- %H:获得当前小时值 08
计算日期和时间
DATE_ADD(NOW(), INTERVAL 1 DAY/YEAR)
:想在日期基础上增加一天或者1小时,或者计算两天间的间隔可以用此函数。函数表达式表示可以给当前时间增加一天或一年。当传入的INTERVAL是负值时代表回到过去的日期。1
2
3
4-- SELECT NOW() -- 2021-04-05 08:40:45
-- SELECT DATE_ADD(NOW(),INTERVAL 1 DAY) -- 2021-04-06 08:41:32
-- SELECT DATE_ADD(NOW(),INTERVAL 1 YEAR) -- 2022-04-05 08:42:42
-- SELECT DATE_ADD(NOW(),INTERVAL -1 YEAR) -- 2020-04-05 08:42:58DATE_SUB(NOW(), INTERVAL 1 DAY/YEAR)
:在一个日期的基础上,减去另一个日期。1
2
3-- SELECT NOW() -- 2021-04-05 08:40:45
-- SELECT DATE_SUB(NOW(),INTERVAL 1 YEAR) -- 2020-04-05 08:44:58
-- SELECT DATE_SUB(NOW(),INTERVAL -1 YEAR) -- 2022-04-05 08:45:18DATEDIFF('2019-01-03 09:00', '2019-01-04 10:00')
:计算两个日期的间隔,只返回天数的间隔。1
SELECT DATEDIFF('2022-01-02 09:00','2021-01-02 10:00') -- 365
TIME_TO_SEC
:返回从零点开始计算到当前时间的间隔时间,值是秒。1
SELECT TIME_TO_SEC('09:00') - TIME_TO_SEC('08:58') -- 120
IFNULL & COALESCE
IFNULL(selected_column, if_null_value)
:当select的selected_column为NULL时,就为将原本查询的NULL替换为if_null_value。COALESCE(selected_column, other_column, if_null_value)
:当select的selected_column为NULL时,返回other_column的值,如果other_column也是NULL,则返回if_null_value自定义的值。
IF函数
IF(expression, first, second)
:判断一个列的值,如果符合表达式,则返回first值,否则返回second值,表达式可以是函数或任何值。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37mysql> SELECT *
-> FROM payments
-> LIMIT 10;
+------------+-----------+------------+------------+--------+----------------+
| payment_id | client_id | invoice_id | date | amount | payment_method |
+------------+-----------+------------+------------+--------+----------------+
| 1 | 5 | 2 | 2019-02-12 | 8.18 | 1 |
| 2 | 1 | 6 | 2019-01-03 | 74.55 | 1 |
| 3 | 3 | 11 | 2019-01-11 | 0.03 | 1 |
| 4 | 5 | 13 | 2019-01-26 | 87.44 | 1 |
| 5 | 3 | 15 | 2019-01-15 | 80.31 | 1 |
| 6 | 3 | 17 | 2019-01-15 | 68.10 | 1 |
| 7 | 5 | 18 | 2019-01-08 | 32.77 | 1 |
| 8 | 5 | 18 | 2019-01-08 | 10.00 | 2 |
+------------+-----------+------------+------------+--------+----------------+
8 rows in set (0.00 sec)
mysql> SELECT
-> client_id,
-> invoice_id,
-> date,
-> IF(payment_method=1, "Online", "Offline")
-> FROM payments
-> LIMIT 10;
+-----------+------------+------------+-------------------------------------------+
| client_id | invoice_id | date | IF(payment_method=1, "Online", "Offline") |
+-----------+------------+------------+-------------------------------------------+
| 5 | 2 | 2019-02-12 | Online |
| 1 | 6 | 2019-01-03 | Online |
| 3 | 11 | 2019-01-11 | Online |
| 5 | 13 | 2019-01-26 | Online |
| 3 | 15 | 2019-01-15 | Online |
| 3 | 17 | 2019-01-15 | Online |
| 5 | 18 | 2019-01-08 | Online |
| 5 | 18 | 2019-01-08 | Offline |
+-----------+------------+------------+-------------------------------------------+
8 rows in set (0.00 sec)
CASE运算符
- ```mysql
CASE
END AS COLUMN_NAMEwhen [EXPRESSION] THEN [RETURN_VALUE] when [EXPRESSION] THEN [RETURN_VALUE] when ... ELSE [RETURN_VALUE]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
判断多个列的值,如果符合表达式,则返回对应的值,否则返回ELSE对应设置的值,表达式可以是函数或任何值。
```sql
mysql> SELECT client_id,
-> date,
-> CASE
-> WHEN (amount < 10) THEN "LOW_VALUE_C"
-> WHEN (amount > 10) THEN "HIGH_VALUE_C"
-> ELSE "UNKNOWN_C"
-> END AS value_evaluate
-> FROM payments
-> LIMIT 10;
+-----------+------------+----------------+
| client_id | date | value_evaluate |
+-----------+------------+----------------+
| 5 | 2019-02-12 | LOW_VALUE_C |
| 1 | 2019-01-03 | HIGH_VALUE_C |
| 3 | 2019-01-11 | LOW_VALUE_C |
| 5 | 2019-01-26 | HIGH_VALUE_C |
| 3 | 2019-01-15 | HIGH_VALUE_C |
| 3 | 2019-01-15 | HIGH_VALUE_C |
| 5 | 2019-01-08 | HIGH_VALUE_C |
| 5 | 2019-01-08 | UNKNOWN_C |
+-----------+------------+----------------+
8 rows in set (0.00 sec)
评论