带有LIKE运算符的Select语句中的MySQL Case

时间:2010-08-26 21:39:48

标签: mysql case

是否可以在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

这显然不起作用,但我希望它可能。

4 个答案:

答案 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以匹配您的实际位数。