4.1 字符函数

1、length

功能:获取参数值的字节值

  1. SELECT LENGTH('subei');
  2. SELECT LENGTH('鬼谷子qwe');

2、concat

功能:拼接字符串
语法:select concat(字符1,字符2,字符3,…);
image.png
image.png

SELECT CONCAT(last_name,'_',first_name) 姓名 FROM employees;

3、upper、lower

功能:

  • upper:变大写
  • lower:变小写 ```sql SELECT UPPER(‘ton’); SELECT LOWER(‘TON’);

示例:将姓变大写,名变小写,然后拼接

SELECT CONCAT(UPPER(last_name),LOWER(first_name)) 姓名 FROM employees;

<a name="3OOfv"></a>
#### 4、substr 
注意:索引从1开始

功能一:截取指定索引位置后面的所有字符<br />截取第4个字符开始的所有字符串:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/2963105/1629250219890-93256db2-98ea-4aea-bfa9-e4781c8333ed.png#height=157&id=MLkQS&margin=%5Bobject%20Object%5D&name=image.png&originHeight=157&originWidth=437&originalType=binary&ratio=1&size=12948&status=done&style=none&width=437)<br />功能二:截取从指定索引处指定字符长度的字符<br />截取第2个字符开始长度为3的字符串:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/2963105/1629250265934-d91bf3b0-601b-44c7-aa78-71496463d919.png#height=158&id=wrGh5&margin=%5Bobject%20Object%5D&name=image.png&originHeight=158&originWidth=455&originalType=binary&ratio=1&size=13534&status=done&style=none&width=455)

<a name="zDtgj"></a>
#### 5、instr
功能:获取子串第一次出现的索引,找不到返回0<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/2963105/1629250767573-35903dd9-3c73-427e-8886-ca241133237d.png#height=173&id=aYDvI&margin=%5Bobject%20Object%5D&name=image.png&originHeight=173&originWidth=542&originalType=binary&ratio=1&size=17238&status=done&style=none&width=542)

<a name="tPYZt"></a>
#### 6、trim
功能:去除前后空格或去除其他指定字符
```sql
SELECT LENGTH(TRIM('    霍山    ')) AS out_put;

SELECT TRIM('+' FROM '++++李刚+++刘邦+++') AS out_put;

image.png

7、lpad

功能:用指定的字符实现左填充指定长度
image.png

8、rpad

功能:用指定的字符实现右填充指定长度
image.png

9、replace

功能:替换指定字符
image.png

4.2 数学函数

1、round

功能:按四舍五入保留指定的位数

SELECT ROUND(1.45);
SELECT ROUND(1.567,2);

image.png

2、truncate

功能:截取到指定位数(不按照四舍五入)
image.png

3、ceil

功能:向上取整,返回>=该参数的最小整数
image.png
image.png

4、floor

功能:向下取整,返回<=该参数的最大整数
image.png

5、mod

功能:取余

SELECT MOD(10,3);

6、rand

功能:获取随机数,返回0-1之间的小数

SELECT RAND();

image.png

4.3 日期函数

1、now

功能:返回当前系统时间+日期
image.png

2、curdate

功能:返回当前日期
image.png

3、curtime

功能:返回当前时间
image.png

4、year

功能:返回年
image.png

5、month,monthname

功能:返回月
image.png
MONTHNAME:以英文形式返回月
image.png

6、day,datediff

功能:返回日
image.png
DATEDIFF:返回两个日期相差的天数
image.png

7、str_to_date

功能:将字符串通过指定格式转换成日期
image.png

8、date_format

功能:将日期格式化成字符串
image.png
image.png

9、timestampdiff

TIMESTAMPDIFF函数,有参数设置,可以精确到天(DAY)、小时(HOUR),分钟(MINUTE)和秒(SECOND),使用起来比datediff函数更加灵活。对于比较的两个时间,时间小的放在前面,时间大的放在后面。

—相差1天
select TIMESTAMPDIFF(DAY, ‘2018-03-20 23:59:00’, ‘2015-03-22 00:00:00’);
—相差49小时
select TIMESTAMPDIFF(HOUR, ‘2018-03-20 09:00:00’, ‘2018-03-22 10:00:00’);
—相差2940分钟
select TIMESTAMPDIFF(MINUTE, ‘2018-03-20 09:00:00’, ‘2018-03-22 10:00:00’);

—相差176400秒

select TIMESTAMPDIFF(SECOND, ‘2018-03-20 09:00:00’, ‘2018-03-22 10:00:00’);

10、INTERVAL()函数

INTERVAL()函数可以返回分段后的结果,语法如下:

INTERVAL(N,N1,N2,N3,……….)

其中,N是要判断的数值,N1,N2,N3,…是分段的间隔。

这个函数的返回值是段的位置:

如果N<N1,则返回0,

如果N1<=N<N2,则返回1,

如果N2<=N<N3,则返回2。

所以,区间是前闭后开的。

11、date_add()

需求描述:
在使用mysql的过程中,需要对日期进行计算,比如对某个日期加上几天,几个小时等操作,
在此记录下,dateadd()函数的使用.
操作过程:
date_add()函数语法:
DATE_ADD(_date
,INTERVAL expr unit)
备注:date_add()和adddate()是同义词.
参数说明:
date:起始日期或者起始时间
expr:指定的是一个间隔值,在起始时间中增加或者减少,注意:expr是一个字符串.对于负值间隔,可以以”-“开头
unit:表示的是一个单位,比如,加上的是1天还是一个小时.

12、dayofweek

DAYOFWEEK函数返回日期的工作日索引值,即星期日为1,星期一为2,星期六为7。 这些索引值对应于ODBC标准。

4.4 其他函数

1、version

功能:当前数据库服务器的版本
image.png

2、database

功能:当前打开的数据库
image.png

3、user

功能:当前用户
image.png

4、password

功能:返回该字符的密码形式
image.png

5、md5

功能:返回该字符的md5加密形式
image.png

4.5 流程控制函数

1、if函数

image.png
image.png

2、case函数

使用一:switch case 的效果(等值判断)

/*
java中
switch(变量或表达式){
    case 常量1:语句1;break;
    ...
    default:语句n;break;
}

mysql中

case 要判断的变量或表达式
when 常量1 then 要显示的值1或语句1
when 常量2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end

#案例:查询员工的工资,要求:

部门号=30,显示的工资为1.1倍
部门号=40,显示的工资为1.2倍
部门号=50,显示的工资为1.3倍
其他部门,显示的工资为原工资

*/

SELECT salary 原始工资,department_id,
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END AS 新工资
FROM employees;

使用二:类似于多重if else

/*
java中:
if(条件1){
    语句1;
}else if(条件2){
    语句2;
}
...
else{
    语句n;
}    

mysql中:
case 
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
...
else 要显示的值n或语句n
end

*/

#案例:查询员工的工资的情况
/*
如果工资>20000,显示A级别
如果工资>15000,显示B级别
如果工资>10000,显示c级别
否则,显示D级别
*/

SELECT salary,
CASE
WHEN salary>20000 THEN 'A'
WHEN salary>15000 THEN 'B'
WHEN salary>10000 THEN 'C'
ELSE 'D'
END AS 工资等级
FROM employees;