我知道存在用于查找子字符串的 Like 运算符 - 并且我正在寻找一个 如果存在 可以保存/减少代码行的解决方案。
场景:
用户表,其中名称列代表用户的全名。
- 约翰·多伊
- 约翰·斯佩林
- 罗布·劳
- 罗布·威廉姆斯
API - "..../?name = "Rob Doe"
我可以用空格分割字符串“Rob Doe”并运行两个查询:
select * from Users where name like "%Rob%"
select * from Users where name like "%Doe%"
我的问题 - MySql 中是否有内置功能/宏可以在 1 个数据库调用中为我完成此操作?,而不是 2 个或更多(具体取决于数量)给定字符串中的单词数?
最佳答案
<强> SQL DEMO
With split_parameter as (
SELECT
DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(vals, ' ', n.digit+1), ' ', -1) val
FROM
( SELECT 'Rob Doe' as vals) as tt1 -- parameter here
INNER JOIN
(SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6) n
ON LENGTH(REPLACE(vals, ' ' , '')) <= LENGTH(vals)-n.digit
)
SELECT name, CONCAT('%', val, '%') as filter
FROM users
JOIN split_parameter
ON users.name like CONCAT('%', val, '%')
输出
如果您有两个匹配项,您可以使用:
SELECT DISTINCT Name
关于php - 查找 SQL 子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57677485/