我有两列,一列是“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 特定的解决方案,请随时回答。
答案 0 :(得分:1)
CONCAT_WS
调用的参数应该用双引号引起来。如果它们在单引号中,Postgres 会将它们解释为字符串文字。这应该有效:
SELECT * FROM table WHERE CONCAT_WS(' ', "firstName", "lastName") ILIKE '%some_value%'
我还建议使用 ILIKE
而不是 LIKE
- 这将使您的搜索词的模式匹配不区分大小写。
答案 1 :(得分:0)
使用STR_POS
PostgreSQL strpos() 函数用于查找位置,从那里子字符串在字符串中匹配。
select * from table where strpos(concat_ws(' ', first_name, last_name),'Clay') > 0
用变量替换文字