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

zmeyuzjn  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(359)

我的下一个数据库表的设置将更加优化。不幸的是,此列已经设置为一列[数据]包含复选框数组值,这些值按以下方式保存:

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

不是最理想的,我知道。我需要的是一个mysql查询,它只选择| ~ |前面的[data]列中的值。基本上我只需要选择奇数值。
非常感谢任何能为我指明正确方向的帮助。我在一个查询中尝试了if语句,但没有成功。当然我错删了。

ycl3bljg

ycl3bljg1#

我需要的是一个mysql查询,它只选择| ~ |前面的[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      |

演示

相关问题