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

时间:2012-07-06 03:31:58

标签: sql postgresql

我正在尝试使用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 的两边连接

1 个答案:

答案 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;

我喜欢第一个查询的外观,但它们都做同样的事情。所以你的逻辑似乎是正确的,所以这似乎是字符串中的拼写错误。