0

我正在尝试使用该LIKE语句连接一个变量,由于某种原因,它只找到要搜索的单词位于文本变量末尾的值。

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

在这个例子中考虑:

a.key1是“你好”

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; 

在这个存储过程中,它不会返回值;它不会找到“HELLO”这个词?

如果a_text包含“I SAY HELLO” ,它只会返回值

有谁知道我做错了什么?似乎这是正确的,因为我在变量a.key1的两侧连接了一个%

4

1 回答 1

1

您可以使用位置字符串函数代替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 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;

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

于 2012-07-06T06:41:39.123 回答