MySQL多个IF CASE语句

时间:2015-03-19 14:26:36

标签: 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

注意:值来自矩形棱镜,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;

但是我被告知“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

但我并没有达到我想要的目标。

最后,我希望有类似的东西:

footprintSize     lval     rval     dval
24 x 24            24       24
8 x 8 (Ø 10)        8       8        10
ø 11                                 11

对于空格,我可以为null,甚至可以添加零,但我更关心的是如何将这些数据拆分为三列。

谢谢。

0 个答案:

没有答案