Re: Requete sur champ texte complexe
Posted by:
Cedric L.
Date: May 18, 2009 12:52PM
Merci; je vais me lancer sur ca.
Sachant que le nombre recherché vient d une autre table; la generation de la regle dynamique va etre marrante... :)
J'avais lancé un script php qui recreait une table de resultats mais c'est evidement moins pratique que la generation directe... quoique!
Merci pour ta piste,
EDIT:
Je vous poste ma solution au cas ou cela intéresserait du monde.
Elle prend la valeur du nombre a rechercher dans une sous requête.
La solution devrait fonctionner pour des nombres compris entre 0 et 99;
N'ayant pas besoin des centaines...
Cedric
SELECT t0.position, t0.number, CONCAT(t0.regexp1,t0.regexp2,t0.regexp3,t0.regexp4,t0.regexp5,t0.regexp6,t0.regexp7) AS regex
, t0.position REGEXP CONCAT(t0.regexp1,t0.regexp2,t0.regexp3,t0.regexp4,t0.regexp5,t0.regexp6,t0.regexp7) AS ISOK
FROM (
SELECT t2.number, t2.position
, CONCAT(
'(.*)?(([^0-9]'
,t2.number
,'[^0-9])|(([^0-9][0-'
, IF(t2.number<9,t2.number,'9')
,'])'
) AS regexp1
, IF( (FLOOR(t2.number/10)-1)>0 , CONCAT(
'|([1-'
, FLOOR(t2.number/10)-1
,'][0-9])'
) , '' ) AS regexp2
, IF( (t2.number-FLOOR(t2.number/10)*10)>0 , CONCAT(
'|(['
,FLOOR(t2.number/10)
,'][0-'
, (t2.number-1-FLOOR(t2.number/10)*10)
,'])'
) , '' ) AS regexp3
, ')\-(' AS regexp4
, IF( (t2.number-FLOOR(t2.number/10)*10)<9 , CONCAT(
'(['
, FLOOR(t2.number/10)
, ']['
, (t2.number+1-FLOOR(t2.number/10)*10)
, '-9])|'
) , '' ) AS regexp5
, IF( FLOOR(t2.number/10)<9 , CONCAT(
'(['
, FLOOR(t2.number/10)+1
, '-9][0-9])'
) , '') AS regexp6
,'))(.*)?' AS regexp7
FROM (
SELECT 8 AS number, '2,8-15,19-70,51' AS position
) AS t2
) AS t0
Cedric
Edited 1 time(s). Last edit at 05/19/2009 08:09AM by Cedric L..