合并两列并对结果执行 where 操作

时间:2021-01-11 01:17:22

标签: sql postgresql knex.js

我有两列,一列是“firstName”,一列是“lastName”。我正在尝试对这两列的串联执行 where 操作以匹配全名。

这是我尝试过的:

docker run --rm -v /path/to/hostdir:/mnt/out "$IMAGENAME" /bin/cp -r /inside/container/ /mnt/out/

这只是返回一个空数组。

示例数据:

<头>
名字 姓氏
克莱顿 史密斯
芭芭拉 克莱曼
山姆 彼得森

当 some_value = Clay 时,它应该返回 'Clayton Smith' 和 'Barbara Clayman'

我从其他一些 stackoverflow 答案中得到了很多这种语法,这些答案被标记为类似问题的解决方案,但是当我自己实现这个时,我无法让它工作。

FWIW 我将使用 knex.js 构建这些查询,所以如果有 knex.js 特定的解决方案,请随时回答。

2 个答案:

答案 0 :(得分:1)

CONCAT_WS 调用的参数应该用双引号引起来。如果它们在单引号中,Postgres 会将它们解释为字符串文字。这应该有效:

SELECT * FROM table WHERE CONCAT_WS(' ', "firstName", "lastName") ILIKE '%some_value%'

我还建议使用 ILIKE 而不是 LIKE - 这将使您的搜索词的模式匹配不区分大小写。

答案 1 :(得分:0)

使用STR_POS

PostgreSQL strpos() 函数用于查找位置,从那里子字符串在字符串中匹配。

https://w3resource.com/PostgreSQL/strpos-function.php#:~:text=The%20PostgreSQL%20strpos()%20function,being%20matched%20within%20the%20string.&text=Example%20of%20PostgreSQL%20STRPOS(),within%20the%20argument%20is%205

select * from table where strpos(concat_ws(' ', first_name, last_name),'Clay') > 0

用变量替换文字

相关问题