MySQL多IF CASE语句
我有一个临时表“productsTmp”,其中有一列“footprintSize”。 该列包含以下格式的多个字符串: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
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功能,这使得这个任务非常困难。