php - 查找 SQL 子字符串

标签 php mysql substring

我知道存在用于查找子字符串的 Like 运算符 - 并且我正在寻找一个 如果存在 可以保存/减少代码行的解决方案。

场景:

  1. 用户表,其中名称列代表用户的全名。

    • 约翰·多伊
    • 约翰·斯佩林
    • 罗布·劳
    • 罗布·威廉姆斯
  2. 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, '%')

输出

enter image description here

如果您有两个匹配项,您可以使用:

SELECT DISTINCT Name

关于php - 查找 SQL 子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57677485/

相关文章:

php - 在 PHP 5.2 中,为什么在同一行实例化一个类并调用一个方法是无效的?

PHP 仅显示来自 4 的第一张图片

php - Laravel PHP 模型上的别名?

python - 使用python将csv文件导入Mysql数据库

php - 我的下拉菜单不可见

php - 2 删除,只有一个工作 [POSTGRESQL]

mysql - 如何使用自动递增的列(字段)将数据插入 MySQL?

java - 如何从 int 字符串中获取 char 的子字符串

c - 字符串是否包含列表中的单词

python - 在 Python 中使用函数返回子字符串