使用LIKE运算符select语句中的MySQL案例

是否有可能在一个MySQL SELECT语句中结合CASE语句和LIKE运算符?

例如,我试图查询一个数据库,以两种格式之一存储数据在一个单一的列(这是可怕的,伤了我的头,但我不能改变数据,所以它是什么)。 所以有时列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 

这显然是行不通的,但林希望这是可能的。

使用CASE的第二种forms应该工作:

 SELECT CASE WHEN digits LIKE '6901%' THEN substr(digits,4) WHEN digits LIKE '91%' THEN substr(digits,2) END as digits FROM raw 

而且,在SELECT的结尾处有一个逗号。

尝试

 SELECT CASE true WHEN digits LIKE "6901%" THEN substr(digits,4) WHEN digits LIKE "91%" THEN substr(digits,2) END as "digits", FROM raw 

也许使用LEFT()

 SELECT CASE WHEN LEFT(digits, 4) = '6901' THEN substr(digits,4) WHEN LEFT(digits, 2) = '91' THEN substr(digits,2) END FROM raw 

应该比LIKELIKE

假设数字的数量是不变的,你可以使用这样的东西:

 SELECT IF(digits > 919999, MOD(digits, 100), MOD(digits, 10000) FROM raw 

0以匹配您的实际位数。