1、FIND_IN_SET
FIND_IN_SET() 是一个 MySQL 中的字符串函数,用于在一个由逗号分隔的字符串列表中查找指定字符串的位置。如果找到了指定的字符串,FIND_IN_SET() 将返回该字符串在列表中的位置(索引值)。如果没有找到,它将返回 0。
其语法如下:
FIND_IN_SET(str, strlist)
- str: 要在列表中查找的字符串。
- strlist: 用逗号分隔的字符串列表。
例如,考虑以下情况:
SELECT FIND_IN_SET('apple', 'orange,banana,apple');
此查询将返回 3,因为 ‘apple’ 在列表 ‘orange,banana,apple’ 中的位置是第三个元素。
FIND_IN_SET() 经常用于需要从一组预定义的选项中查找或验证特定值的情况,特别是在处理多选字段或多对多关系的数据时。例如,在人力资源管理系统的应聘者信息中,可能需要根据应聘者技能与岗位所需技能的匹配度进行筛选,这时 FIND_IN_SET() 就能派上用场了。
值得注意的是,FIND_IN_SET() 不区分大小写,且如果列表中有重复的字符串,函数将返回第一个出现的字符串位置。此外,由于其内部实现的原因,FIND_IN_SET() 在处理非常长的字符串列表时可能会表现不佳,因此在设计数据库结构时,应该考虑其性能影响
2、GROUP_CONCAT
GROUP_CONCAT 是 SQL 中的一个聚合函数,用于将同一组中的多个值连接成一个字符串。这个函数通常与 GROUP BY 语句一起使用,将属于同一组的多行数据的指定列值组合到一起,形成一个单独的、由指定分隔符分隔的字符串。
GROUP_CONCAT 的基本语法如下:
GROUP_CONCAT([DISTINCT] expr [ORDER BY {unsigned_integer | col_name | expr}]
[SEPARATOR str_val])
- expr:要连接的列或表达式的名称。
- DISTINCT(可选):如果使用,GROUP_CONCAT 将只包含唯一的值。
- ORDER BY(可选):用于指定结果字符串中值的顺序。
- SEPARATOR(可选):用于在连接的值之间插入一个字符串作为分隔符,默认通常是逗号。
例如,假设有以下的 employees 表:
emp_id | dept_id | name |
---|---|---|
1 | 10 | mike |
2 | 10 | jen |
3 | 20 | finoa |
如果我们想得到每个部门的员工名单,可以使用以下 SQL 查询:
SELECT dept_id, GROUP_CONCAT(name SEPARATOR ', ') AS employee_list
FROM employees
GROUP BY dept_id;
dept_id | name |
---|---|
10 | mike,jen |
20 | finoa |
这样,我们就可以方便地获得一个汇总的字符串,显示每个部门的员工姓名列表。这对于生成报告或进行数据分析特别有用。
3、DATE_SUB
DATE_SUB() 是 SQL 中的一个日期函数,主要用于从给定的日期中减去一段时间间隔。这个函数在 MySQL 中特别常见,它允许用户基于特定的时间单位(如天、小时、分钟等)来计算过去的某个日期或时间点。
DATE_SUB() 函数的基本语法如下:
DATE_SUB(date, INTERVAL expr unit)
- date:这是起始日期或时间,可以是日期类型的列名或者直接的日期字面量。
- expr:是要减去的数值,即间隔的数量。
- unit:定义了间隔的时间单位,可能的单位包括:
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
例如,如果你想从当前日期减去 5 天,你可以使用下面的 SQL 语句:
SELECT DATE_SUB(CURDATE(), INTERVAL 5 DAY);
这将返回当前日期之前 5 天的日期。
4、MySQL 常用函数整理
MySQL 提供了大量的内置函数来帮助您执行各种数据处理任务。下面是按类别划分的一些常用函数。
1、字符串函数
函数名 | 描述 | 示例 |
---|---|---|
CONCAT() | 连接两个或多个字符串 | SELECT CONCAT('Hello', ' ', 'World'); |
LOWER() | 将字符串转换为小写 | SELECT LOWER('HELLO WORLD'); |
UPPER() | 将字符串转换为大写 | SELECT UPPER('hello world'); |
LENGTH() | 返回字符串的长度 | SELECT LENGTH('Hello'); |
SUBSTRING() | 返回字符串的一部分 | SELECT SUBSTRING('Hello World', 7, 5); |
TRIM() | 删除字符串两端的空格 | SELECT TRIM(' Hello '); |
REPLACE() | 替换字符串中的部分字符 | SELECT REPLACE('Hello World', 'World', 'Universe'); |
LOCATE() | 查找一个字符串在另一个字符串中的位置 | SELECT LOCATE('World', 'Hello World'); |
2、数学函数
函数名 | 描述 | 示例 |
---|---|---|
ABS() | 返回数值的绝对值 | SELECT ABS(-10); |
ROUND() | 四舍五入到指定的小数位数 | SELECT ROUND(10.567, 2); |
FLOOR() | 返回不大于给定数值的最大整数 | SELECT FLOOR(10.99); |
CEIL() | 返回不小于给定数值的最小整数 | SELECT CEIL(10.01); |
RAND() | 返回 0 到 1 之间的随机数 | SELECT RAND(); |
PI() | 返回 π 的值 | SELECT PI(); |
MOD() | 返回除法运算的余数 | SELECT MOD(10, 3); |
3、日期和时间函数
函数名 | 描述 | 示例 |
---|---|---|
NOW() | 返回当前日期和时间 | SELECT NOW(); |
CURDATE() | 返回当前日期 | SELECT CURDATE(); |
CURTIME() | 返回当前时间 | SELECT CURTIME(); |
DATE_ADD() | 添加指定的时间间隔 | SELECT DATE_ADD(NOW(), INTERVAL 1 DAY); |
DATE_SUB() | 减去指定的时间间隔 | SELECT DATE_SUB(NOW(), INTERVAL 1 DAY); |
TIMESTAMPDIFF() | 计算两个日期之间的时间间隔 | SELECT TIMESTAMPDIFF(DAY, '2024-01-01', '2024-07-01'); |
DATEDIFF() | 计算两个日期之间的天数差 | SELECT DATEDIFF('2024-07-01', '2024-01-01'); |
DATE_FORMAT() | 格式化日期和时间 | SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s'); |
4、转换函数
函数名 | 描述 | 示例 |
---|---|---|
CAST() | 将表达式转换为指定的数据类型 | SELECT CAST('123' AS INT); |
STR_TO_DATE() | 将字符串转换为日期 | SELECT STR_TO_DATE('2024-07-25', '%Y-%m-%d'); |
TO_DAYS() | 将日期转换为天数 | SELECT TO_DAYS('2024-07-25'); |
FROM_UNIXTIME() | 将 Unix 时间戳转换为日期和时间 | SELECT FROM_UNIXTIME(1689519600); |
5、条件函数
函数名 | 描述 | 示例 |
---|---|---|
IF() | 返回基于条件的结果 | SELECT IF(1 > 2, 'Yes', 'No'); |
CASE | 根据条件返回不同的值 | SELECT CASE WHEN 1 > 2 THEN 'Yes' ELSE 'No' END; |
COALESCE() | 返回第一个非 NULL 的参数 | SELECT COALESCE(NULL, NULL, 'Default'); |
6、组合与聚合函数
函数名 | 描述 | 示例 |
---|---|---|
COUNT() | 计算行数 | SELECT COUNT(*) FROM table_name; |
SUM() | 计算数值总和 | SELECT SUM(column_name) FROM table_name; |
AVG() | 计算数值平均值 | SELECT AVG(column_name) FROM table_name; |
MIN() | 找出最小值 | SELECT MIN(column_name) FROM table_name; |
MAX() | 找出最大值 | SELECT MAX(column_name) FROM table_name; |
标签:常用,函数,DATE,日期,Mysql,字符串,SELECT,name From: https://blog.csdn.net/weixin_44990907/article/details/140667651