2012-07-06 72 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