hsym 发表于 2024-2-26 16:44:04

组合复选框多选多个值存入数据库表,如何表格展现的时候显示成多行记录?

本帖最后由 hsym 于 2024-2-26 16:50 编辑

比如做一个派工计划,派一个班三个工人,值班人字段是张三,李四,王五这样的格式,查询派工单的时候按人员需要汇总,怎样显示成一行记录一个值?


就像这样的记录,显示成上海一行,北京一行

Erik.Xue 发表于 2024-2-26 16:44:05

您好,可以参考:

在SQL中,处理逗号分隔的数据并将其转换为多行通常需要使用特定数据库系统提供的函数。以下是一些常见数据库系统的处理方法:

1. MySQL:
   在MySQL 8.0及更高版本中,可以使用`STRING_TO_ARRAY()`和`UNNEST()`函数来实现:
   ```sql
   SELECT UNNEST(STRING_TO_ARRAY(column_name, ',')) AS single_value
   FROM your_table;
   ```

   对于早期版本的MySQL,可能没有内置的拆分函数,需要创建自定义函数或者通过其他复杂查询方式实现。

2. PostgreSQL:
   使用`unnest()`和`string_to_array()`函数:
   ```sql
   SELECT unnest(string_to_array(column_name, ',')) AS single_value
   FROM your_table;
   ```

3. SQL Server:
   SQL Server中没有内置的直接拆分字符串的函数,但可以使用`STRING_SPLIT()`(适用于SQL Server 2016及更高版本):
   ```sql
   SELECT value
   FROM STRING_SPLIT(column_name, ',')
   WHERE RTRIM(value) <> ''
   ```

   对于较早版本的SQL Server,则可能需要编写自定义函数或使用如`XML PATH()`等技巧。

4. Oracle:
   Oracle可以使用`REGEXP_SUBSTR()`配合分析函数:
   ```sql
   SELECT REGEXP_SUBSTR(column_name, '[^,]+', 1, level) as single_value
   FROM your_table
   CONNECT BY LEVEL <= REGEXP_COUNT(column_name, ',') + 1;
   ```

请根据您使用的具体数据库系统选择合适的方法,并替换 `your_table` 和 `column_name` 为您实际的表名和列名。

页: [1]
查看完整版本: 组合复选框多选多个值存入数据库表,如何表格展现的时候显示成多行记录?