MySQL多IF CASE语句

MySQL多IF CASE语句,mysql,Mysql,我有一个临时表“productsTmp”,其中有一列“footprintSize”。 该列包含以下格式的多个字符串: a) 12 x 34 b) v 11 c) 12 x 34 (v 12) 我只想提取数字,以获得如下信息: a) v1 = 12 ; v2 = 34 b) v3 = 11 c) v1 = 12 ; v2 = 34 ; v3 = 12 footprintSize lval rval dval 24 x 24 24 24

我有一个临时表“productsTmp”,其中有一列“footprintSize”。 该列包含以下格式的多个字符串:

a) 12 x 34
b) v 11
c) 12 x 34 (v 12)
我只想提取数字,以获得如下信息:

a) v1 = 12 ; v2 = 34
b) v3 = 11
c) v1 = 12 ; v2 = 34 ; v3 = 12
footprintSize     lval     rval     dval
24 x 24            24       24
8 x 8 (Ø 10)        8       8        10
ø 11                                 11
注:数值来自矩形棱镜,v1=宽度,v2=长度,v3=高度。高度总是在字符“v”(在我的例子中是ø)之后

为了提取这些值,我考虑使用子查询循环,但我只想到了下一个想法:

IF footprintSize LIKE '%x%'
   -- Example: 24 x 24
      SELECT SUBSTRING_INDEX(footprintSize, 'x', 1) AS lval;
      SELECT SUBSTRING_INDEX(footprintSize, 'x', -1) AS rval;

            -- Example: 8 x 8 (Ø 10)
            IF rval LIKE '%)%'
            SELECT SUBSTRING_INDEX(SELECT SUBSTRING_INDEX(SELECT SUBSTRING_INDEX(footprintSize, '(', -1), ' ', -1), ')', 1) AS dval;

   ELSE
      -- Example: ø 11
      SELECT SUBSTRING_INDEX(footprintSize, ' ', -1) AS dval;

   END IF;
然而,有人告诉我,“如果”只在存储过程中有效,这不是我想要的。所以我试了下一个:

SELECT
    CASE TRUE
      WHEN footprintSize LIKE "%x%" THEN (SUBSTRING_INDEX(footprintSize,'x', 1))
      WHEN footprintSize LIKE "%)%" THEN (SUBSTRING_INDEX(footprintSize,')', -1))
    END as "footprintSize"
FROM productsTmp
但我还没有接近我想要的

最后,我想要一些类似于:

a) v1 = 12 ; v2 = 34
b) v3 = 11
c) v1 = 12 ; v2 = 34 ; v3 = 12
footprintSize     lval     rval     dval
24 x 24            24       24
8 x 8 (Ø 10)        8       8        10
ø 11                                 11
对于空空间,我可以使用null,甚至可以添加一个零,但我更关心的是如何将这些数据拆分为三列


谢谢。

你能不能先正确地存储数据?我知道这很可怕,但这就是我接收数据的方式:(如果是我,我想我会尝试构造某种解析器(比如PHP)MySQL没有preg_match功能,这使得这个任务非常困难。