MySQL 函数

字符串函数

CONCAT

字符串 s1,s2 等多个字符串合并为一个字符串

1
2
# SELECT CONCAT(str:varchar*)
SELECT CONCAT('hello', 'world', '!')

image-20230531234947036

CONCAT_WS

同 CONCAT(s1,s2,…) 函数,但是每个字符串之间要加上 x,x 可以是分隔符

1
2
# SELECT CONCAT(sepatator:varchar, str:varchar*)
SELECT CONCAT_WS('-', 'hello', 'world', '!')

image-20230531235230173

FIND_IN_SET

返回在字符串s2中与s1匹配的字符串的位置

1
2
# SELECT FIND_IN_SET(str:varchar, strlist.varchar);
SELECT FIND_IN_SET("c", "a,b,c,d,e");

image-20230531235407139

FIELD

返回第一个字符串 s 在字符串列表(s1,s2…)中的位置

1
2
# FIELD(s,s1,s2...)
SELECT FIELD('c', 'a', 'b', 'c', 'd', 'e');

image-20230531235818595

FORMAT

函数可以将数字 x 进行格式化 “#,###.##”, 将 x 保留到小数点后 n 位,最后一位四舍五入,同ROUND

1
2
# FORMAT(x,n)
SELECT FORMAT(314.5634, 2);

image-20230601000108736

LOCATE

从字符串 s 中获取 s1 的开始位置

1
2
# SELECT LOCATE(substr:varchar, str:varchar)
SELECT LOCATE('st', 'mystring')

image-20230601000407197

POSITION

从字符串 s 中获取 s1 的开始位置

1
2
# SELECT POSITION(substr:varchar IN str:varchar)
SELECT POSITION('b' in 'abc')

image-20230601001603513

REPLACE

将字符串 s2 替代字符串 s 中的字符串 s1

1
2
# SELECT REPLACE(str:varchar, from_str:varchar, to_str:varchar)
SELECT REPLACE('abc','a','x')

image-20230601001740053

STRCMP

比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1

1
2
# SELECT STRCMP(expr1:varchar, expr2:varchar)
SELECT STRCMP('hello', 'hello');

image-20230601002020123

SUBSTR

从字符串 s 的 start 位置截取长度为 length 的子字符串

1
2
# SUBSTR(s, start, length)
SELECT SUBSTR('hello', 2, 3);

image-20230601002158153

日期函数

DATE_FORMAT

日期格式化->VARCHAR()

1
2
# SELECT DATE_FORMAT(date:date format:varchar)
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')

image-20230531214904588

DATE_ADD/DATE_SUB

增加/减少时间段->DATE

1
2
# DATE_ADD(date:date, INTERVAL expr:int type)
SELECT DATE_ADD(NOW(), INTERVAL 10 DAY)

image-20230531220249299

DATE_DIFF

计算日期天数间隔

1
2
# SELECT DATEDIFF(expr1:datetime, expr2:datetime)
SELECT DATEDIFF(NOW(), '2000-08-13')

image-20230531221245979

TIMESTAMPDIFF

计算时间差:expr2:datetime − expr1:datetime->int

1
2
# SELECT TIMESTAMPDIFF(type, expr1:datetime, expr2:datetime)
SELECT TIMESTAMPDIFF(MINUTE, '2000-08-13 12:00:00', NOW())

image-20230531224506799

高级函数

CASE

CASE WHEN THEN ELSE END

1
2
3
4
5
6
7
8
9
10
11
12
13
# SELECT CASE expr
# WHEN condition1 THEN result1
# WHEN condition2 THEN result2
# ...
# WHEN conditionN THEN resultN
# ELSE result
# END

SELECT CASE
WHEN 1 > 0 THEN 1
WHEN 1 = 0 THEN 2
ELSE 0
END

image-20230531223411741

CAST

转换数据类型

1
2
# SELECT CAST(ANY:any AS datatype, cast_datatype)
SELECT CAST(NOW() AS char)

image-20230531224347587

COALESCE

返回参数中的第一个非空表达式(从左往右)

1
2
# SELECT COALESCE(value:any*)
SELECT COALESCE(null, null, 'hello', null, 'test')

image-20230531224400093

IF

如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。

1
2
# SELECT IF(expr:any, v1, v2)
SELECT IF(1 > 0,'正确','错误')

image-20230531225123746

IFNULL

如果 v1 的值不为 NULL,则返回 v1,否则返回 v2

1
2
# SELECT IFNULL(expr1:any, expr2:any)
SELECT IFNULL(NULL, 'hello world')

image-20230531232335769

ISNULL

判断表达式是否为 NULL

1
2
# SELECT ISNULL(expr:any)
SELECT ISNULL(expression)

image-20230531232646826