Portál AbcLinuxu, 7. května 2025 10:24
Dobrý den,
řeším následující problém.
Mám v databázi sloupeček kategorie s hodnotami např.;
"5;7;9;2;15"
nebo může vypadat třeba
"15"
nebo
"6;7;5;15"
Dejme tomu, že ho chci vybrat podle toho, že obsahuje hodnotu 5.
Pokud použiji "SELECT * FROM tabulka LIKE '%5%' ORDER BY id" tak se samozřejmě vybere i řádek obsahující 15. Je možné (zřejmě pomocí REGEXP) vybrat jen řádky, které obsahují 5?
Doufám, že je to srozumitelné :)
Díky za každou radu
Když se na konec řádku připojí ; tak se může použít něco takového (nejsem si jist, že to bude fungovat na mysql)
where sloupec + ';' like '%;5;%'
SELECT * FROM tabulka t1 WHERE t1.clmn LIKE '5;%' OR t1.clmn LIKE '%;5;%' OR t1.clmn LIKE '%;5' /
Je to performance killer, ale mělo by to fungovat.
Jinak na Oracle se to dá řešit takto:
SELECT * FROM tabulka t1 WHERE REGEXP_LIKE(t1.clmn, :REGULAR_EXPRESSION) /
MySQL bude mít určitě podobnou funkci. Navíc bych tipoval, že dokáže lépe využít indexy.
Kdyby tě zajímalo, jak pod Oracle to CSV převést do ResultSetu jedním dotazem — tedy z tabulky
CLMN_ID | CLMN_VALUE ----------+------------- 1 | 1;2;3;4 2 | 5;6
dostat
CLMN_ID | CLMN_VALUE_VAL ----------+----------------- 1 | 1 1 | 2 1 | 3 1 | 4 2 | 5 2 | 6
zadej novou otázku do poradny.
No a ten "spilt" by me zrovna celkem zajimal, ale ne ze bych to aktualne k necemu potreboval, takze dotaz na to psat nebudu
Lec kdyby to melo nejake jednoduche reseni a chtelo se ti, tak to sem prosim postni, dik
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.