内置函数小记
# 内置函数小记
在日常开发中,MySQL 内置函数在进行逻辑判断、条件筛选以及数据处理方面发挥了关键作用。
以下是一些常用的 MySQL 内置函数,以及它们在日常开发中的应用:
# case 表达式
当在 SQL 查询中使用 CASE
表达式时,你实际上在进行条件逻辑的计算,以根据满足的条件选择不同的结果。
作为表达式,CASE
表达式在执行时会被判定为一个固定值,因此它可以写在聚合函数内部;也正因为它是表达式,所以还可以写在 SELECE
子句、GROUP BY
子句、WHERE
子句、ORDER BY
子句里。
基本语法:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE result_else
END
1
2
3
4
5
6
2
3
4
5
6
CASE
: 表达式的开头。WHEN condition THEN result
: 当满足条件时,返回对应的结果。ELSE result_else
: 当所有条件都不满足时返回的默认结果。END
: 表达式的结束。
示例:
假设有一个学生成绩表,你想为每个学生添加一个等级(A、B、C):
SELECT
student_name,
score,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
ELSE 'C'
END AS grade
FROM
student_scores;
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
在这个例子中:
- 如果分数大于等于 90,那么等级是 'A'。
- 如果分数大于等于 80 但小于 90,等级是 'B'。
- 如果分数低于 80,等级是 'C'。
下面详细解释 CASE
表达式:
WHEN score >= 90 THEN 'A'
:- 当分数大于等于 90 时,这个条件成立,
CASE
表达式返回 'A'。
- 当分数大于等于 90 时,这个条件成立,
WHEN score >= 80 THEN 'B'
:- 当前面的条件不成立而分数大于等于 80 时,这个条件成立,
CASE
表达式返回 'B'。
- 当前面的条件不成立而分数大于等于 80 时,这个条件成立,
ELSE 'C'
:- 如果前面的条件都不成立,
ELSE
子句会返回 'C',作为默认结果。
- 如果前面的条件都不成立,
END
:- 表达式的结束。
CASE
表达式的优点之一是它的灵活性。你可以根据需要添加任意数量的 WHEN
子句,构建复杂的条件逻辑。在 SELECT
语句中,它还可以用于创建新的列,为查询结果添加更多的信息。
注意:
CASE
表达式也支持简写形式,例如CASE WHEN condition THEN result END
,其中不需要使用WHEN
子句。这样的简写形式适用于只有一个条件的情况。
# if 函数
- 语法:
IF(condition, true_value, false_value)
- 描述: 根据条件的真假返回不同的值。
- 应用: 用于在查询中进行条件判断,例如在
SELECT
语句中对某个字段进行条件性赋值。
SELECT name, IF(score >= 90, 'A', 'B') AS grade FROM student_scores;
1
# coalesce 函数
- 语法:
COALESCE(value1, value2, ...)
- 描述: 返回参数列表中的第一个非 NULL 值。
- 应用: 用于处理可能为 NULL 的字段,提供默认值或使用备选值。
SELECT name, COALESCE(score, 0) AS score FROM student_scores;
1
# concat 函数
- 语法:
CONCAT(str1, str2, ...)
- 描述: 将多个字符串连接成一个字符串。
- 应用: 用于拼接字段值,构造需要的字符串。
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;
1
# date_format 函数
- 语法:
DATE_FORMAT(date, format)
- 描述: 将日期格式化为指定的字符串。
- 应用: 用于在查询中按照特定的日期格式显示日期。
SELECT name, DATE_FORMAT(birthdate, '%Y-%m-%d') AS formatted_birthdate FROM
1
# substring 函数
- 语法:
SUBSTRING(str, start, length)
- 语法:
SUBSTRING(str, start, length)
- 描述: 返回字符串的子串。
- 应用: 用于从字符串中提取部分内容,例如截取电话号码中的区号。
SELECT name, SUBSTRING(phone_number, 1, 3) AS area_code FROM contacts;
# 例如
phone_number: "1234567890"
SUBSTRING(phone_number, 1, 3): "123"
1
2
3
4
5
2
3
4
5
# SUBSTRING_INDEX 函数
根据指定的分隔符截取字符串的一部分。
UPDATE t_device
SET
channel_id = SUBSTRING_INDEX(device_id, ';', -1),
device_id = SUBSTRING_INDEX(device_id, ';', 1)
WHERE
device_id LIKE '%;%';
1
2
3
4
5
6
2
3
4
5
6
# 函数大全
好文分享:
上次更新: 2024/9/25 11:16:13