Подтвердить что ты не робот

Случай 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

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

4b9b3361

Ответ 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, чтобы соответствовать фактическому количеству цифр.