查询将逗号分隔列值拆分为多行

时间:2015-09-09 17:31:54

标签: mysql

我有一个名为mem_exam_dates的mysql表名。

+---------+-------------+----------------------------------+
| rec_id  |  mem_name   |            exam_dates            |
+---------+-------------+----------------------------------+
|    1    |    Raju     | 2015-01-05,2015-05-09,2018-05-09 |
|    2    |    Rajes    | 2015-10-05,2015-12-09,2018-09-09 |
+---------+-------------+----------------------------------+

现在我想显示如下结果。

+-------+---------------+
|  Raju |   Exam Dates  |
+-------+---------------+
|      2015-01-05       |
|      2015-05-09       |
|      2018-05-09       |
+-----------------------+

我正在编写像

这样的查询

从mem_exam_dates中选择*,其中rec_id = 1

从上面的查询我得到总考试日期为单个字符串。

但我希望考试日期如下。

+----------------+
|   2015-01-05   |
|   2015-05-09   |
|   2018-05-09   |
+----------------+

该查询是什么?

如果有人知道让我知道......

提前致谢

格利扬

2 个答案:

答案 0 :(得分:1)

在MySQL中,您可以使用SUBSTRING_INDEX从字符串中提取部分。

所以你可以试试下面的SQL

SELECT SUBSTRING_INDEX(exam_dates, ',', 1) as first
     , SUBSTRING_INDEX(SUBSTRING_INDEX(exam_dates, ',', 1), ',', -1) as second
     , SUBSTRING_INDEX(exam_dates, ',', -1) as third

在.NET中,您可以使用split()

https://msdn.microsoft.com/de-de/library/b873y76a%28v=VS.110%29.aspx

如果您在名为exam_dates的变量中有列,则可以使用:

string [] dates = exam_dates.Split(new Char [] {','});

所以你有一个所有日期的数组。

答案 1 :(得分:0)

您需要使用服务器端语言处理数据。如果您使用的是PHP,则可以使用explode。

例如:

$dates= explode(",", $longdatestring);
echo $dates[0]; // date1 
echo $dates[1]; // date2

要查找返回的日期数,只需计算数组中的元素。

$numberofdates = count($dates);

或者查看数组,直到元素耗尽。

foreach ($dates as $date) {
    echo $date;
}

有关PHP的更多详细信息: https://secure.php.net/manual/en/function.explode.php