mysql: Instr specificare limiti di parola
-
22-09-2019 - |
Domanda
voglio controllare se una stringa contiene un valore di campo come una stringa o meno.
select * from mytable where instr("mystring", column_name);
, ma questo non esegue la ricerca sui confini di parola.
select * from mytable where instr("mystring", concat('[[:<:]]',column_name,'[[:>:]]');
non funziona neanche. come correggere questo?
Soluzione
È possibile farlo utilizzando il REGEXP
operator:
SELECT * FROM mytable WHERE 'mystring' REGEXP CONCAT('[[:<:]]', column_name, '[[:>:]]');
Si noti, tuttavia, che si tratta di lento . Si potrebbe essere migliore fuori utilizzando funzione di ricerca FULLTEXT
del MySQL se avete a cuore le parole. O fare un normale controllo InStr()
quindi filtrare i risultati.
Altri suggerimenti
Se non è necessario il valore di ritorno della instr
utilizzo like
invece
select * from mytable where column_name like '%mystring%';
Come già discusso nella domanda che ha chiesto ieri , non indici possono essere utilizzati e prestazioni sta per essere cattivo, ma questo potrebbe funzionare:
select *
from mytable
where 'mystring' = column_name -- exact match
or 'mystring' like concat('% ', column_name) -- word at the end
or 'mystring' like concat(column_name, ' %') -- word at beginning
or 'mystring' like concat('% ', column_name, ' %') -- word in the middle