2014-01-14 22 views
0

我是SQL新手,有問題。我想從我的數據庫中刪除任何描述欄中有人標籤「#whatever」的地方。我能寫出下面的查詢:如何在SQL中使用LIKE函數,但是要使用確切的單詞?

select id from table where description_field LIKE "%#whatever%" and user_id=333 

但是,如果我在這裏使用LIKE功能,將刪除無論它#whatever的比賽,但我擔心它可能會刪除一些地方有#whateverANDthis。

我該如何編寫一個刪除行的查詢,只要它在描述中包含「#whatever」,而不是其他變體,如「#whateverANDthis」或「#whateverORthis」。

我想刪除它說:

「我有這麼多的樂趣#whatever」

但不是:

「我有這麼多的樂趣#whateverAndWhatever」

+0

您是否在'description_field'中存儲了多個標籤? –

+0

@juergend是的,所以一個人可以在他們的描述中有多個標籤。 – ariel

+0

[在MySQL中搜索「全字匹配」]的可能重複(http://stackoverflow.com/questions/656951/search-for-whole-word-match-in-mysql) – Carth

回答

2

使用RLIKE,喜歡的正則表達式版本:

WHERE description_field RLIKE '[[:<:]]#whatever[[:>:]]' 

表達[[:<:]][[:>:]]的開頭和結尾的 「單詞邊界」。

+0

謝謝我試過使用它,但我沒有返回的行。我知道我至少有20,000行有這個標籤。 – ariel

+0

這應該工作,所以沒有看到示例數據,我不禁。請用一些示例數據創建一個[SQLFiddle](http://sqlfiddle.com),並將該鏈接發佈到問題中,讓我知道你已經完成了它並且我能夠正常工作。 – Bohemian

0

東西像這樣可能會工作:

select id from table 
where (' ' + description_field + ' ') LIKE "% #whatever %" and user_id=333 
+0

雖然,它不會找到''#whatever。「'。 – Blorgbeard

+0

。 。是的,它會。這就是爲什麼你爲雙方增加空間。主要問題是這是MySQL標記問題上的SQL Server語法。 –

1

它會更好地保存在畝ltiple列,但

SELECT id FROM table WHERE decription_field REGEXP '[[:<:]]#whatever[[:>:]]' and user_id=333 

可以做的伎倆

0

對於您當前的情況,您的查詢必須涵蓋三個場景,第一個詞,中間詞和最後一個詞。所以,您的查詢可能類似於此:

where user_id = 33 
and 
(
description_field like '%#whatever %' -- first word 
or description_field like '% #whatever %' -- middle word 
or description_field like '% #whatever' -- last word 
) 

或者,你可以在那些正則表達式的提案工作。他們可能會更好。