Bootstrap

Mysql之函数

字符串函数:

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 函数返回一个 01 之间的随机浮点数。

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-132024-09-01 之间的天数差,结果为 12 天。

 流程函数:

函数功能
IF(value, t, f)如果 valuetrue,则返回 t,否则返回 f
IFNULL(value1, value2)如果 value1 不为空,则返回 value1,否则返回 value2
CASE WHEN [val1] THEN [res1] ... ELSE [default] END如果 val1true,返回 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'

解释:如果 value1NULL,则返回 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'

;