Est-il possible de combiner l'instruction CASE
et l'opérateur LIKE
dans une instruction MySQL SELECT
?
Par exemple, j'essaie d'interroger une base de données qui stocke les données dans une seule colonne dans l'un des deux formats (c'est horrible et me fait mal à la tête, mais je ne peux pas changer les données pour qu'elles soient comme elles sont.) Ainsi, parfois, la colonne numbers
aurait des données du type "6901xxxxxxxx" et parfois des données du type "91xxxxxxxxxxx".
Ce que je voudrais faire, c'est interroger les données comme suit -
SELECT
CASE digits
WHEN LIKE "6901%" THEN substr(digits,4)
WHEN LIKE "91%" THEN substr(digits,2)
END as "digits",
FROM raw
Cela ne fonctionne évidemment pas, mais j'espère que c'est possible.
Utiliser la seconde forme de CASE
devrait fonctionner:
SELECT
CASE
WHEN digits LIKE '6901%' THEN substr(digits,4)
WHEN digits LIKE '91%' THEN substr(digits,2)
END as digits
FROM raw
De plus, vous avez une virgule parasite à la fin de votre SELECT
.
Essayer
SELECT
CASE true
WHEN digits LIKE "6901%" THEN substr(digits,4)
WHEN digits LIKE "91%" THEN substr(digits,2)
END as "digits",
FROM raw
Peut-être utiliser LEFT()
?
SELECT
CASE
WHEN LEFT(digits, 4) = '6901' THEN substr(digits,4)
WHEN LEFT(digits, 2) = '91' THEN substr(digits,2)
END
FROM raw
Devrait être plus performant que le LIKE
.
En supposant que le nombre de chiffres soit constant, vous pouvez utiliser quelque chose comme ceci:
SELECT IF(digits > 919999, MOD(digits, 100), MOD(digits, 10000) FROM raw
Ajoutez 0
pour correspondre à votre nombre actuel de chiffres.