Случай MySQL в Select Statement с оператором LIKE
Можно ли комбинировать оператор CASE
и оператор LIKE
в инструкции MySQL 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
Это, очевидно, не работает, но я надеюсь, что это возможно.
Ответы
Ответ 1
Использование второй формы 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
.
Ответ 2
Try
SELECT
CASE true
WHEN digits LIKE "6901%" THEN substr(digits,4)
WHEN digits LIKE "91%" THEN substr(digits,2)
END as "digits",
FROM raw
Ответ 3
Возможно, используйте 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
Предполагая, что число цифр является постоянным, вы можете использовать что-то вроде этого:
SELECT IF(digits > 919999, MOD(digits, 100), MOD(digits, 10000) FROM raw
Добавьте 0
, чтобы соответствовать фактическому количеству цифр.