sql >> Databasteknik >  >> RDS >> Mysql

Mysql LIKE-sats och separata ord i ett fält

Du kan använda ett REGEXP för att matcha något av orden i din söksträng:

select *
from tbl
where
  title REGEXP CONCAT('[[:<:]](', REPLACE('Acme burger', ' ', '|'), ')[[:>:]]')

Observera att detta inte kommer att vara särskilt effektivt. Se fiol här .

Om du behöver matcha alla ord i din sträng kan du använda en fråga som denna:

select *
from tbl
where
  title REGEXP CONCAT('[[:<:]]', REPLACE('Acme burger', ' ', '[[:>:]].*[[:<:]]'), '[[:>:]]')

Fiol här . Men orden måste vara i rätt ordning (t.ex. 'Acme burger' matchar, 'burger Acme' kommer inte att göra det). Det finns ett REGEXP som matchar varje ord i valfri ordning, men det stöds inte av MySql, om du inte installerar en UDF som stöder Perl regexp.



  1. GeoDjango på Windows:Kunde inte hitta GDAL-biblioteket / OSError:[WinError 126] Den angivna modulen kunde inte hittas

  2. Är det möjligt att ha en MySQL-kolumn som innehåller flera värden som främmande nycklar?

  3. prestationsstraff för strängar som primärnycklar?

  4. Gör en INSERT ... SELECT-sats atomic