我希望能够将任何给定的字符与WHERE子句匹配。
例如,如果我在表中有以下描述字段的条目
"背部有狮子的蓝色T恤XL"
之后:
SELECT* FROM products WHERE name LIKE 'tshirt'
不返回任何内容
我也许可以在php中分解字符串,并在每个字母后面使用通配符%,但这听起来像是一个小任务的许多操作。
有人能找到更好的方法吗?
非常感谢
我最终是这样做的:
$filter = implode('%',str_split($filter));
$filter = '%'.$filter.'%';
然后执行sql:
从名称类似$filter 的产品中选择*
SELECT * FROM products WHERE name LIKE '%tshirt%';
这匹配任何包含字符串"tshirt"的内容。%是通配符。
首先,您需要通配符:
where name like '%tshirt%'
然而,由于连字符的原因,这仍然不会完全有帮助。您也可以使用lower()
来确保大小写无关紧要。也许这正是你想要的:
where replace(lower(name), '-', '') like '%tshirt%'
或者:
where lower(name) like '%t%shirt%'
您必须添加%
,它是类似..中的通配符。。
SELECT* FROM products WHERE name LIKE '%shirt%'
您应该使用%
:
SELECT* FROM products WHERE name LIKE '%tshirt%'
%
是零个或多个字符的替代品。
由于字母可能会改变,您应该将其转换为小写或大写:
完整而完美的查询:
SELECT * FROM products
WHERE lower(name) LIKE '%tshirt%'
OR lower(name) LIKE '%t_shirt%'
_
是单个字符的替代品。
请参阅通配符中的更多示例。