字符串函数:
1. CONCAT()
- 功能:将多个字符串连接为一个字符串。
- 语法:
CONCAT(string1, string2, ..., stringN)
- 示例:
SELECT CONCAT('Hello', ' ', 'World');
- 结果:
Hello World
- 结果:
2. LENGTH()
- 功能:返回字符串的字节长度(与字符数不同,特别是包含多字节字符的情况)。
- 语法:
LENGTH(string)
- 示例:
SELECT LENGTH('MySQL');
- 结果:
5
- 结果:
4. UPPER()
- 功能:将字符串中的所有字符转换为大写。
- 语法:
UPPER(string)
- 示例:
SELECT UPPER('mysql');
- 结果:
MYSQL
- 结果:
5. LOWER()
- 功能:将字符串中的所有字符转换为小写。
- 语法:
LOWER(string)
- 示例:
SELECT LOWER('MySQL');
- 结果:
mysql
- 结果:
6. SUBSTRING()
- 功能:从字符串中提取子字符串。
- 语法:
SUBSTRING(string, start, length)
7. REPLACE()
- 功能:用一个字符串替换另一个字符串中的子字符串。
- 语法:
REPLACE(string, from_substring, to_substring)
- 示例:
SELECT REPLACE('Hello World', 'World', 'MySQL');
- 结果:
Hello MySQL
- 结果:
- 功能:删除字符串开头和结尾的空格或指定字符。
- 语法:
TRIM([remstr FROM] string)
- 示例:
SELECT TRIM(' Hello MySQL ');
- 结果:
Hello MySQL
- 结果:
8. LPAD()
- 功能:在字符串左侧填充指定的字符,直到字符串达到指定的长度。
- 语法:LPAD(string, length, pad_string)
9. RPAD()
- 功能:在字符串右侧填充指定的字符,直到字符串达到指定的长度。
- 语法:
RPAD(string, length, pad_string)
- 示例:
SELECT RPAD('MySQL', 10, '*');
- 结果:
MySQL*****
- 结果:
10. INSTR()
- 功能:返回子字符串在字符串中第一次出现的位置。
- 语法:
INSTR(string, substring)
- 示例:
SELECT INSTR('Hello MySQL', 'MySQL');
- 结果:
7
- 结果:
- 功能:将字符串反转。
11. REVERSE()
- 语法:
REVERSE(string)
- 示例:
SELECT REVERSE('MySQL');
- 结果:
LQSyM
- 结果:
- 示例:
SELECT LPAD('MySQL', 10, '*');
- 结果:
*****MySQL
- 结果:
#字符串函数
# concat字符串拼接
select concat('Hello','Mysql');
# lower把全部字符转换为小写】
select lower('Hello');
# upper把全部字符转换为大写
select upper('Hello');
# lpad左填充
select lpad('01',5,'-');
# rpad右填充
select rpad('01',5,'-');
#trim去除空格(首尾)
select trim(' Hello world ');
#截取字符串,第一个下标是1
select substring('Hello mysql',1,5);
#练习:
#由于业务需求变史、员工的工号,续一为5位数,目前不处5位教的个部在的面补0。例如:1号员工的工号应该为09001。
use test;
#如果id值INT,BIGINT型,LPAD会被MySQL自动忽略,所以需要转化成字符型
ALTER TABLE employee MODIFY id VARCHAR(5);
UPDATE employee SET id = LPAD(id, 5, '0');
数值函数:
CEIL(x) | 向上取整 |
FLOOR(x) | 向下取整 |
MOD(x, y) | 返回 x 除以 y 的模 |
RAND() | 返回 0~1 内的随机数 |
ROUND(x, y) | 求参数 x 的四舍五入的值,保留 y 位小数 |
1. CEIL(x):向上取整
SELECT CEIL(4.3); -- 结果:5
解释:CEIL
函数将 4.3
向上取整为 5
。
2. FLOOR(x):向下取整
SELECT FLOOR(4.8); -- 结果:4
解释:FLOOR
函数将 4.8
向下取整为 4
。
3. MOD(x, y):返回 x
除以 y
的模
SELECT MOD(10, 3); -- 结果:1
解释:MOD
函数计算 10
除以 3
的余数,结果为 1
。
4. RAND():返回 0~1
内的随机数
SELECT RAND(); -- 结果:0.723456789 (随机值)
解释:RAND
函数返回一个 0
到 1
之间的随机浮点数。
5. ROUND(x, y):对数字 x
四舍五入,保留 y
位小数
SELECT ROUND(123.45678, 2); -- 结果:123.46
解释:ROUND
函数将 123.45678
四舍五入到保留两位小数,结果为 123.46
。
组合使用:
你可以将这些函数组合在一起使用,进行复杂的计算:
SELECT ROUND(CEIL(10.4) * RAND(), 2); -- 结果:10.56(结果每次不同)
解释:CEIL(10.4)
向上取整为 11
,然后乘以随机数,再将结果保留两位小数。
#通过数据库的函数,生成一个六位数的随机验证码
select rpad(round(rand() * 1000000,0),6,'0');
日期函数:
函数 | 功能 |
---|---|
CURDATE() | 返回当前日期 |
CURTIME() | 返回当前时间 |
NOW() | 返回当前日期和时间 |
YEAR(date) | 获取指定 date 的年份 |
MONTH(date) | 获取指定 date 的月份 |
DAY(date) | 获取指定 date 的日期 |
DATE_ADD(date, INTERVAL expr type) | 返回一个日期/时间值加上一个时间间隔后的时间值 |
DATEDIFF(date1, date2) | 返回起始时间 date1 和结束时间 date2 之间的天数 |
1. CURDATE():返回当前日期
SELECT CURDATE(); -- 结果:'2024-09-13' (当前系统日期)
2. CURTIME():返回当前时间
SELECT CURTIME(); -- 结果:'15:23:45' (当前系统时间)
3. NOW():返回当前日期和时间
SELECT NOW(); -- 结果:'2024-09-13 15:23:45' (当前系统日期和时间)
4. YEAR(date):获取指定日期的年份
SELECT YEAR('2024-09-13'); -- 结果:2024
5. MONTH(date):获取指定日期的月份
SELECT MONTH('2024-09-13'); -- 结果:9
6. DAY(date):获取指定日期的天数
SELECT DAY('2024-09-13'); -- 结果:13
7. DATE_ADD(date, INTERVAL expr type):返回指定日期加上时间间隔后的新日期
SELECT DATE_ADD('2024-09-13', INTERVAL 10 DAY); -- 结果:'2024-09-23'
解释:在日期 2024-09-13
基础上加上 10 天,结果为 2024-09-23
。
8. DATEDIFF(date1, date2):返回两个日期之间的天数差
SELECT DATEDIFF('2024-09-13', '2024-09-01'); -- 结果:12
解释:计算 2024-09-13
和 2024-09-01
之间的天数差,结果为 12 天。
流程函数:
函数 | 功能 |
---|---|
IF(value, t, f) | 如果 value 为 true ,则返回 t ,否则返回 f |
IFNULL(value1, value2) | 如果 value1 不为空,则返回 value1 ,否则返回 value2 |
CASE WHEN [val1] THEN [res1] ... ELSE [default] END | 如果 val1 为 true ,返回 res1 ,否则返回默认值 default |
CASE [expr] WHEN [val1] THEN [res1] ... ELSE [default] END | 如果 expr 的值等于 val1 ,返回 res1 ,否则返回默认值 default |
1. IF(value, t, f):条件判断
SELECT IF(10 > 5, 'Greater', 'Smaller'); -- 结果:'Greater'
解释:如果 10
大于 5
,则返回 Greater
,否则返回 Smaller
。
2. IFNULL(value1, value2):检查空值
SELECT IFNULL(NULL, 'Default Value'); -- 结果:'Default Value'
解释:如果 value1
为 NULL
,则返回 value2
,即 'Default Value'
。
3. CASE WHEN [val1] THEN [res1] ... ELSE [default] END:多条件判断
SELECT CASE
WHEN salary > 5000 THEN 'High'
WHEN salary > 3000 THEN 'Medium'
ELSE 'Low'
END AS salary_level
FROM employee;
解释:根据 salary
的值返回不同的等级,如果工资大于 5000
,返回 'High'
,如果大于 3000
,返回 'Medium'
,否则返回 'Low'
。
4. CASE [expr] WHEN [val1] THEN [res1] ... ELSE [default] END:表达式判断
SELECT CASE job_title
WHEN 'Manager' THEN 'High Salary'
WHEN 'Developer' THEN 'Medium Salary'
ELSE 'Low Salary'
END AS job_salary
FROM employee;
解释:根据 job_title
的值返回不同的薪资等级,如果职位是 Manager
,返回 'High Salary'
,如果职位是 Developer
,返回 'Medium Salary'
,否则返回 'Low Salary'
。