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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top