我正在尝试使用LIKE
语句连接变量,并且由于某种原因,它只查找要搜索的单词位于文本变量末尾的值。
我正在使用PostgreSQL 8.4,它存储在一个函数(存储过程)
中在这个例子中考虑:
a.key1 是“HELLO”
a_text 是“我说你好世界”
代码:
SELECT count(1), a.key1, a.active, a.campkeydbid
FROM campkeydb a
WHERE a_text LIKE '%'|| a.key1 ||'%'
GROUP BY a.key1, a.active, a.campkeydbid
INTO a_count, a_campaignkey, a_active, a_campkeydbid;
在此存储过程中,它不会返回值;它不会找到“你好”这个词吗?
如果 a_text 包含“I SAY HELLO”,它只会返回值
有谁知道我做错了什么?它似乎是正确的,因为我在变量 a.key1 的两边连接%。
答案 0 :(得分:1)
您可以使用位置字符串功能而不是喜欢。以下是使用法国地区和部门的表格的示例查询。我将尝试找到所有具有包含区域名称的名称的部门。
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'尝试了同样的事情(两个查询都有相同的查询计划,应该提供相同的性能):
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;
我喜欢第一个查询的外观,但它们都做同样的事情。所以你的逻辑似乎是正确的,所以这似乎是字符串中的拼写错误。