MySQL 一个字段值可能为空,也可能是逗号分割的数字,比如值=4,7,8,5,6, 输入4时可以查询得到该条数据,输入6,8时也可以查询到,输入不在里面的值时无法查询,如何实现
时间: 2024-03-16 09:47:45 浏览: 93
你可以使用 MySQL 中的 `FIND_IN_SET()` 函数来实现这个需求。该函数可以在逗号分隔的字符串中查找指定的值,如果找到则返回该值在字符串中的位置,否则返回 0。
例如,假设你有一个名为 `numbers` 的字段,可能为空,也可能包含逗号分隔的数字,比如 `4,7,8,5,6`。你可以使用以下 SQL 语句来查询包含特定数字的记录:
```
SELECT * FROM table_name WHERE FIND_IN_SET('4', numbers) > 0;
SELECT * FROM table_name WHERE FIND_IN_SET('6', numbers) > 0;
SELECT * FROM table_name WHERE FIND_IN_SET('8', numbers) > 0;
```
这些查询可以分别返回包含数字 4、6、8 的记录。如果查询一个不在里面的值,比如 9,那么这个查询就会返回空结果集。注意,这种查询方式对于大数据量的表可能会比较慢,因为它需要对每一行进行字符串的拆分和匹配。
相关问题
mysql process_management表中payment_method字段的数据是通过","分割的数字如何查询可以查出payment_method字段等于某个数字
在MySQL中,如果你的`payment_method`字段是以逗号","分隔的数字列表,你可以使用`FIND_IN_SET()`函数或者子查询来查询特定数字是否存在。以下是两种方法:
1. 使用`FIND_IN_SET()`函数:
```sql
SELECT * FROM process_management
WHERE FIND_IN_SET('你的目标数字', REPLACE(payment_method, ',', '')) > 0;
```
这里,`REPLACE(payment_method, ',', '')`是为了去掉逗号,将字符串转换成单一值数组,再通过`FIND_IN_SET`查找目标数字是否在里面。
2. 使用子查询和IN关键字:
```sql
SELECT * FROM process_management
WHERE payment_method IN (
SELECT GROUP_CONCAT(DISTINCT UNNEST(SPLIT(payment_method, ',')))
FROM process_management
)
AND UNNEST(SPLIT(payment_method, ',')) = '你的目标数字';
```
这里,首先使用子查询将`payment_method`按逗号分割并合并为单行的数值列表,然后检查目标数字是否在合并后的列表中。
注意:上述方法假设你的数据库支持SPLIT()或UNNEST()等函数来分割字符串,例如在MySQL的MariaDB 10.5+版本中可用,如果不是,可能需要使用其他方法,比如正则表达式或者自定义函数(取决于你的数据库版本)。
mysql 分割后所有值相加
可以使用 MySQL 的字符串函数和数值函数来实现将一个字符串字段中的数字分割出来并求和的操作。比如,假设有一个表格 `table1`,其中包含一个名为 `numbers` 的字段,其值为类似于 `1,2,3,4,5` 的字符串,可以使用以下 SQL 语句来实现所有数字的求和操作:
```
SELECT SUM(CAST(SUBSTRING_INDEX(numbers, ',', n) AS UNSIGNED)) AS sum_of_numbers
FROM table1
CROSS JOIN (
SELECT 1 + units.i + tens.i * 10 AS n
FROM (
SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) AS units
CROSS JOIN (
SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
) AS tens
) AS numbers_split
WHERE n <= 1 + LENGTH(numbers) - LENGTH(REPLACE(numbers, ',', ''));
```
这个 SQL 语句使用了 `SUBSTRING_INDEX` 函数来将原始字符串按照逗号 `,` 分割,然后使用 `CAST` 函数将分割出来的字符串转换为无符号整数。由于分割出来的数字的个数是不确定的,因此需要使用一个子查询来生成一个数字序列,然后使用 `CROSS JOIN` 来将其与原始表格结合起来,从而实现对所有数字的求和操作。
阅读全文