PSQL:在存储过程中将值与LIKE连接起来

PSQL:在存储过程中将值与LIKE连接起来,sql,postgresql,Sql,Postgresql,我试图使用LIKE语句连接一个变量,出于某种原因,它只在要搜索的单词位于文本变量末尾的位置查找值 我使用的是PostgreSQL 8.4,它存储在一个函数(存储过程)中 在本例中考虑: a.key1是“你好” 一段文字是“我向世界问好” 代码: 在此存储过程中,它不会返回值;它找不到“你好”这个词吗 仅当文本包含“我说你好”时,它才会返回值 有人知道我做错了什么吗?这似乎是正确的,因为我在变量a.key1的两侧连接了%,您可以使用position string函数,而不是类似的函数。下面是一个使

我试图使用
LIKE
语句连接一个变量,出于某种原因,它只在要搜索的单词位于文本变量末尾的位置查找值

我使用的是PostgreSQL 8.4,它存储在一个函数(存储过程)中

在本例中考虑:

a.key1是“你好”

一段文字是“我向世界问好”

代码:

在此存储过程中,它不会返回值;它找不到“你好”这个词吗

仅当文本包含“我说你好”时,它才会返回值


有人知道我做错了什么吗?这似乎是正确的,因为我在变量a.key1的两侧连接了%,您可以使用position string函数,而不是类似的函数。下面是一个使用法国地区和部门表的示例查询。我将尝试查找包含区域名称的所有部门

select r.name as region, d.name as deprtment, position( r.name in d.name) as pos
from regions r
join departments d on d.region = r.code
where position( r.name in d.name) != 0
and r.name != d.name;
结果是

region  department     pos
"Corse" "Corse-du-Sud"  1
"Corse" "Haute-Corse"   7
我添加了pos列以显示字符串是从1而不是从0索引的。我用“like”尝试了同样的方法(两个查询都有相同的查询计划,应该提供相同的性能):


我喜欢第一个查询的外观,但它们都做相同的事情。因此,您的逻辑似乎是正确的,这看起来像是字符串中的输入错误。

您确定
a.key1
就是
'HELLO'
而不是
'HELLO'
或类似的东西吗?尝试从campkeydb快速
选择'-'| | key1 | |'-'以查看是否有多余的空格。或者
a_text
值可能有问题?您是否尝试过使用字符串本身替换
a_text
来运行此查询?谢谢您的回答。。我做了一些快速选择,没有空格,但我还添加了修剪我的JAVA发送“干净”的信息!谢谢通过添加“AND a.deleted=false”解决了这个问题,我意识到有更多的行,但被标记为deleted…感谢您的所有回复和帮助。。。我使用了两个select语句,您是对的逻辑是正确的(感谢您确保我没有发疯)查看我的数据,我发现有更多的行具有相同的键,但它们被标记为“已删除”,所以我添加了(a.deleted=FALSE),这解决了问题。。。似乎总是人为的错误。。。再次感谢您的时间和帮助!!
region  department     pos
"Corse" "Corse-du-Sud"  1
"Corse" "Haute-Corse"   7
select r.name as region, d.name as deprtment, position( r.name in d.name) as pos
from regions r
join departments d on d.region = r.code
where d.name like '%' || r.name || '%'
and r.name != d.name;