2017-10-01 2 views
0

par exemple. Je veux sélectionner tous les LigneLa donnée contient une valeur supérieure ou égale à 5 dans le tableau ci-dessous. c'est-à-dire les rangées 11,13,14 et 16.Comment faire pour sélectionner toutes les lignes de la table mysql contenant au moins une valeur supérieure à la valeur de recherche?

╔════╦═══════════════════╗ 
║ ID ║ Data    ║ 
╠════╬═══════════════════╣ 
║ 10 ║ 2 or 3   ║ 
║ 11 ║ 5 and 6   ║ 
║ 12 ║ 3 or 4   ║ 
║ 13 ║ 5 or 6(Optional) ║ 
║ 14 ║ 5     ║ 
║ 15 ║ 1 or 2   ║ 
║ 16 ║ 6 (Optional) or 3 ║ 
╚════╩═══════════════════╝ 
+0

Quel type de données est 'data'? – Panther

+0

Pourriez-vous élaborer plus sur la colonne de données, quel type il est et ce que le ou, et et facultatif signifient exactement dans le contexte de votre db. –

+0

Le type de données de ** Data ** est ** varchar **. @ Panther – Osamaha

Répondre

0

J'ai résolu ce problème quelque chose comme ceci.

CREATE FUNCTION explode(str VARCHAR(255), delim VARCHAR(12), pos INT) 
RETURNS VARCHAR(255) 
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(str, delim, pos), 
     LENGTH(SUBSTRING_INDEX(str, delim, pos-1)) + 1), 
     delim, ''); 


SELECT ID,REPLACE(Data,'(Optional)','') AS data FROM `Temp` WHERE data >= 5 OR TRIM(explode(explode(data,'and',1),'or',1)) >= 5 OR TRIM(explode(explode(data,'and',1),'or',2)) >=5 OR TRIM(explode(explode(data,'and',2),'or',1)) >=5 OR TRIM(explode(explode(data,'and',2),'or',2)) >=5