web-dev-qa-db-ja.com

LIKE演算子を使用したSelectステートメントのMySQLケース

MySQL CASEステートメントでLIKEステートメントとSELECT演算子を組み合わせることは可能ですか?

たとえば、2つの形式のいずれかで単一の列にデータを格納するデータベースを照会しようとしています(これはひどく頭を痛めますが、データを変更できないため、データを変更できません)。そのため、列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

これは明らかに機能しませんが、可能性を期待しています。

40
HurnsMobile

CASE の2番目の形式を使用すると動作します:

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

さらに、SELECTの末尾に浮遊コンマがあります。

77

試してみる

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

おそらく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
p.campbell

桁数が一定であると仮定すると、次のようなものを使用できます。

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

追加 0は、実際の桁数と一致します。

0
Joshua Martell