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;