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
これは明らかに機能しませんが、可能性を期待しています。
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
の末尾に浮遊コンマがあります。
試してみる
SELECT
CASE true
WHEN digits LIKE "6901%" THEN substr(digits,4)
WHEN digits 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
は、実際の桁数と一致します。