给定一个名为全名的列,我如何在没有订单的情况下对名字/姓氏进行筛选?
在下面的javascript示例中,查询在按姓氏进行搜索时无效。
function getQuery(searchWord){
return `SELECT * FROM user WHERE fullname like '%${searchWord}%' `
}
// trying to search fullname "Elon Musk"
getQuery("Elon M") // okay
getQuery("Musk E") // no result通过关键字" Musk“查找" Elon”的查询是什么?
NB:列的名字和姓氏也存在
发布于 2022-10-19 07:44:54
您可以使用FULLTEXT MATCH AGAINST进行搜索。
SELECT * FROM user WHERE (MATCH (fullname) AGAINST ('${searchWord} IN NATURAL LANGUAGE MODE'))您必须在列FULLTEXT search index上创建一个fullname
或者你可以用空间来分割你的searchWord,然后做LIKE '%$(searchWordPart1)%' AND LIKE '%$(searchWordPart2)%'等等。
发布于 2022-10-19 08:04:07
最后,我使用一些javascript解决了这个问题。
function getQuery(searchTerm = '') {
// " Musk E " => ["Musk", "E"]
const arr = searchTerm.split(/\s+/).filter((e) => e)
// ["Musk", "E"] => (first_name like '%Musk%' or last_name like '%Musk%') AND (first_name like '%E%' or last_name like '%E%')
const conditions = arr
.map((e) => `(first_name like '%${e}%' or last_name like '%${e}%')`)
.join(` AND `)
return `use SNOW select distinct sys_id, name from dbo.sys_user where ${conditions}`
}https://stackoverflow.com/questions/74121458
复制相似问题