是否可以在MySQL CASE
语句中组合LIKE
语句和SELECT
运算符?
例如,我试图查询一个数据库,该数据库以两种格式中的一种格式存储单个列中的数据(这很糟糕并且伤害了我的头脑,但我无法更改数据,因此它就是它。)。所以有时列numbers
会有像“6901xxxxxxxx”这样的数据,有时会有像“91xxxxxxxxxxx”这样的数据。
我想做的是查询数据 -
SELECT
CASE digits
WHEN LIKE "6901%" THEN substr(digits,4)
WHEN LIKE "91%" THEN substr(digits,2)
END as "digits",
FROM raw
这显然不起作用,但我希望它可能。
答案 0 :(得分:73)
使用第二种形式的CASE
应该有效:
SELECT
CASE
WHEN digits LIKE '6901%' THEN substr(digits,4)
WHEN digits LIKE '91%' THEN substr(digits,2)
END as digits
FROM raw
此外,您在SELECT
的末尾有一个逗号逗号。
答案 1 :(得分:6)
尝试
SELECT
CASE true
WHEN digits LIKE "6901%" THEN substr(digits,4)
WHEN digits LIKE "91%" THEN substr(digits,2)
END as "digits",
FROM raw
答案 2 :(得分:4)
也许使用LEFT()
?
SELECT
CASE
WHEN LEFT(digits, 4) = '6901' THEN substr(digits,4)
WHEN LEFT(digits, 2) = '91' THEN substr(digits,2)
END
FROM raw
应该比LIKE
更高效。
答案 3 :(得分:0)
假设位数是常数,您可以使用以下内容:
SELECT IF(digits > 919999, MOD(digits, 100), MOD(digits, 10000) FROM raw
添加0
以匹配您的实际位数。