Возможно ли объединить оператор 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
Это, очевидно, не работает, но я надеюсь, что это возможно.
Возможно, используйте 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
.
Предполагая, что количество цифр постоянно, вы можете использовать что-то вроде этого:
SELECT IF(digits > 919999, MOD(digits, 100), MOD(digits, 10000) FROM raw
Добавьте 0
для соответствия вашему фактическому количеству цифр.