字符函数
length(str) | 获取 str 的字节个数 |
concat(str1,str2,strn) | 拼接字符 str1,str2,strn |
upper(str1)、lower(str1) | 大小写转换 |
substr(str,num) | 截取str字符长度从num开始的内容 |
instr(str,sub) | 返回str中子串sub第一次出现的位置,若无该字串,返回0 |
trim( chars from str) | 去掉str前后特定字符段chars,书写如 trim(str)时去掉空格 |
lpad(str,length,chars)【rpad】 | 使用char进行左【右】填充,使总长度为length。str超长时均从左侧开始截断 |
replace(str,sub,newsub) | 使用 newsub 替换 str 中的 sub |
- MYSQL 中,索引从 1 开始
- substr()存在多个重载,如 substr(str,num,length),截取Str从num开始length长度的字符
- 简单函数使用示例
1
2
3
4
5select rpad('Hellow_world',15,'!') As Game;
#结果为 'Hellow_world!!!'
select rpad('Hellow_world',6,'!') As Game;
#结果为 'Hellow'
常见数学函数
round(num,n) | 四舍五入保留n位,n缺省时为整数 |
ceil(num) | 向上取整(>=num 的最小整数) |
floor(num) | 向下取整 |
truncate(num,n) | 截断num,保留n位小数 |
mode(num1,num2) | 求余,与num1%num2相同 |
数学函数基本与其他语言类似,不再做介绍
日期函数
now() | 返回当前时间 |
curdate()【curtime()】 | 获取当前日期【时间】 |
year(date)【month()】 | 获取数据date中的年份【月份】信息,同样有day,hour,minute等 |
str_to_date(str,format) | 按照format中格式对str进行解析获取日期(默认格式) |
date_format(date,format) | 按照format中格式,将格式转换为字符串 |
- 获取时间及日期基于当前系统时间
- format格式除关键字符外部分可自行定义
-
简单示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14#使用 str_to_date(str,format)
#字符格式 年-日-月
select str_to_date( '1998-25-2','%Y-%d-%c');
#结果为 '1998-02-25'
#使用 str_to_date(str,format)
Use myemployees;
select
first_name,date_format(hiredate,'%m月/%d日 %Y年') As 入职日期
from
employees
order by
hiredate desc;
#结果之一'Alberto', '12月/23日 2002年'
流程控制函数
if(a,b,c) | 类似三元运算符 a?b:c; |
case | switch语句用法 |
case | 多重if 语句用法 |
1 | # switch用法 |
注意:
- 可搭配 select 作为查询表达式,此时when 后只能使用 值或表达式,不能使用语句。
- case 可单独使用,进行流程控制(仅限在
begin
-end
中),此时语法需加上[]
中内容,即;
与end case
- switch相当于等值判断,if相当于区间判断在mySQL语法上区别在于cass后是否有表达,when后的判断为值还是条件判断
-
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#根据部门号,显示不同倍率的工资(switch用法)
select salary,department_id,
case department_id
when 30 then salary*1.1
when 40 then salary*1.2
else salary
end As `new salary`
from employees;
#工资范围,区分等级(if 用法)
select last_name,salary,
case
when salary>=15000 then'A'
when salary>=10000 then 'B'
else 'C'
end As `Grade`
from employees;