Случай MySQL в операторе Select с оператором LIKE

Возможно ли объединить оператор CASE и LIKE оператор в операторе MySQL SELECT ?

Например, я пытаюсь запросить базу данных, которая хранит данные в одном столбце в любом из двух форматов (это ужасно и ранит мою голову, но я не могу изменить данные, так что это то, что есть.). Поэтому иногда в столбце чисел будут данные типа «6901xxxxxxxx», а иногда - «91xxxxxxxxxxx».

Что я хотел бы сделать, так это запросить данные -

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

Это, очевидно, не работает, но я надеюсь, что это возможно.

42
задан HurnsMobile 26 August 2010 в 21:39
поделиться

2 ответа

Возможно, используйте 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.

4
ответ дан 26 November 2019 в 23:39
поделиться

Предполагая, что количество цифр постоянно, вы можете использовать что-то вроде этого:

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

Добавьте 0 для соответствия вашему фактическому количеству цифр.

0
ответ дан 26 November 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: