我有一个临时表“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,甚至可以添加零,但我更关心的是如何将这些数据拆分为三列。
谢谢。