2012-07-06 67 views
0

我试图使用LIKE语句连接变量,出于某种原因,它仅查找要搜索的单词位于文本变量末尾的值。PSQL:在存储过程中使用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; 

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

它只会返回值如果a_text包含“我打招呼”

有谁知道我做错了吗?看起来这是正确的,因为我在变量a.key1的两侧连接了一个

+1

你确定'a.key1'完全是'HELLO'而不是'HELLO'或类似的东西吗?尝试快速'选择' - '|| key1 || ' - '从campkeydb'看看你是否有流浪的空间。 – 2012-07-06 03:53:36

+0

或者'a_text'值可能有问题?您是否尝试过使用'a_text' *替换字符串本身来运行此查询? – 2012-07-06 04:58:24

+0

谢谢您的回应..我做了一些快速选择并没有空格,但是我还在我的JAVA中添加了修剪以发送“干净”信息!谢谢......它通过添加“AND a.deleted = false”得到解决,我意识到有更多的行但被标记为已删除... – Beto 2012-07-06 15:50:30

回答

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我想同样的事情用“喜欢”(这两个查询具有相同的查询计划并应给予同样的性能):

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; 

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

+0

感谢您的所有答复和帮助...我使用了select语句和你是正确的逻辑是正确的(谢谢你确保我没有疯了)看我的数据,我看到有更多的行使用相同的密钥,但他们被标记为“已删除”,所以我添加(AND a.deleted = FALSE),这解决了这个问题......它似乎总是人为错误......再次感谢您的时间和帮助! – Beto 2012-07-06 15:46:15