mysql在包含定界符分隔值的列中选择奇数值

时间:2018-11-02 14:19:11

标签: mysql delimited-text

我的下一个数据库表将更优化地设置。不幸的是,这已经设置好了,其中一列[数据]包含复选框数组值,这些值通过以下方式保存:

value 1|~|value 1 value 2|~|value 2 value 3|~|value 3

我知道这不是最佳选择。 我需要的是一个mysql查询,该查询仅选择|〜|前面的[data]列中的值。基本上认为我需要选择唯一的奇数。

任何向我指出正确方向的帮助都将不胜感激。我在查询中尝试了if语句,但它不起作用。当然我误删了。

1 个答案:

答案 0 :(得分:1)

  

我需要的是仅选择   |〜|前面[data]列中的值。

请注意|~|之前的数字必须唯一。
它不会两次显示相同的数字。

查询

SELECT
 DISTINCT 
   SUBSTRING (
       record_data.column
     , LOCATE('|~|', record_data.`column` , number_generator.number) - 1
     , 1
   ) AS number
FROM (
  SELECT 
   @row := @row + 1 AS number
  FROM (
    SELECT 0 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
  ) record_1
  CROSS JOIN (
    SELECT 0 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
  ) record_2    
  CROSS JOIN (
    SELECT 0 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
  ) record_4
  CROSS JOIN (
    SELECT 0 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
  ) record_5     
  CROSS JOIN (
    SELECT @row := 0 
  ) AS init_user_params
) AS number_generator

CROSS JOIN (


SELECT 
 *
FROM (
  SELECT 'value 1|~|value 1 value 2|~|value 2 value 3|~|value 3' AS `column`
) AS record 

) AS record_data

WHERE
   LOCATE('|~|', record_data.`column` , number_generator.number) <> 0

结果

| number |
| ------ |
| 1      |
| 2      |
| 3      |

demo