# 字符串函数
# 拼接两个字符串 concat(字符串1, 字符串2)
select concat('123', '456'); # 123456
# 字符串中所有字符转小写 lower(字符串)
select lower('Hello'); # hello
# 字符串中所有字符转大写 upper(字符串)
select upper('Hello'); # HELLO
# 字符串向左侧补充长度 lpad(原字符串, 补充后的长度, 被补充的字符串)
select lpad('tx', 5, '0'); # 000tx
# 字符串向右侧补充长度 lpad(原字符串, 补充后的长度, 被补充的字符串)
select rpad('tx', 5, '0'); # tx000
# 清除字符串左右两侧的空格 trim(字符串)
select trim(' hello world! '); # 'hello world!'
# 字符串截取 substring(字符串, 起始位置, 长度)
# 注意:字符串下标是从 1 开始的
select substring('123456', 2, 4); # 2345
# 数值函数
# 向上取整 ceil(数值)
select ceil(12.01); # 13
# 向下取整 floor(数值)
select floor(12.9); # 12
# 两个数值相除取余 mod(数值1, 数值2)
# 相当于js 中的 数值1 % 数值2
select mod(10, 3); # 1
# 生成 0 - 1 之间的随机数
select rand();
# 四舍五入,并保留n位小数,默认n=0 round(数值, n)
select round(12.665, 2) # 12.67
# 日期函数
# 返回当前日期 curdate()
select curdate();
# 返回当前时间 curtime()
select curtime();
# 返回当前日期+时间
select now();
# 注意:格式 日期中必须存在完整的年月日,年月日连接符号可自定义,必须有
# 获取指定date的年份 year(date)
select year('2021/01<01 12:12:12');
# 获取指定date的月份 month(date)
select month('2021-01<01');
# 获取指定date的日期 day(date)
select day('2021-01<05');
# 返回一个日期/时间值加上一个时间间隔 expr 后的时间值
select date_add('2021-01-01', interval 4 year)
# 返回两个日期的间隔天数 datediff(起始时间, 结束时间)
# 注意:datediff 会用第一个日期减去第二个日期
select datediff(curdate(), '2021-01-01')
# 流程函数
# if(value, t, f) 如果value为真,则返回t,否则返回f
select names, if(age >= 18, '成年', '未成年') from person p ;
# ifnull(value1, value2) 如果value1不为空(null),则返回value1,否则返回value2
SELECT ifnull('abc', '123'); # abc
SELECT ifnull('', '123'); # ''
SELECT ifnull(null, '123'); # 123
# CASE WHEN 条件 THEN 值 ... else 值 end
# 满足 when条件则返回then值,否则继续往下执行,直到执行到end
select
*, (case when age < 18 then '少年' when age < 35 then '青年' when age < 60 then '中年' else '老年' end)
from person p