2016-09-26 36 views
1

我需要編寫一個單獨的SQL語句來列出所有包含精確單詞'right'(包括大寫和小寫)作爲名爲Track的名稱的一部分的單詞。換句話說,它不會在輸出中包含帶有「權利」或「正義」字樣的曲目名稱。找到確切的單詞作爲字符串的一部分

我寫了這個,但我不斷地在字母前面或後面加上字母,例如:明亮或權利。

SELECT name 

FROM Track 

WHERE name LIKE "%right%"; 
+0

你需要做一個MATCH。首先你建立一個FTS表,然後做一個MATCH。要使用FTS表,您需要在SQLITE庫中定義SQLITE_ENABLE_FTS3。 MATCH在全文中起作用,並且不區分大小寫。 – BobRun

回答

2

LIKE用於模式匹配。 %的意思是「零個或多個任意字符」,如其他系統中的*通配符。 name LIKE "%right%"表示「名稱」是「正確的」,前後都是「。這就是爲什麼你得到「更明亮」和「權利」。

用正則表達式可以寫出類似於/\bright\b/的地方,其中\b表示「單詞分隔符」。但SQLite需要一個插件來使用正則表達式,LIKE沒有相應的東西。所有你必須使用的是%(零個或多個字符)或_(任何一個字符)。最好你可以做的是匹配空格,如LIKE "% right %",但只有在「右」周圍有空格時纔有效。 「現在」不匹配。

如果你想從「右」,「右轉」和「左轉左轉」等數值中選擇「right」這個詞,你需要覆蓋四種可能性。

  • 它在一開始。
  • 它在最後。
  • 它在中間。
  • 獨自一人。

這意味着四個表達式。

name LIKE "right %" or 
name LIKE "% right" or 
name LIKE "% right %" or 
lower(name) = "right" 

LIKE在SQLite中默認是不區分大小寫的。 =不是,因此需要lower(name)將值歸一化爲小寫。

+0

我不認爲他在尋求平等。如果名稱字段包含「RIGHT MAN」,那麼他希望該名稱在輸出中。但根據你的答案,不會給出正確的輸出? –

+0

謝謝= =似乎只給我什麼,因爲沒有軌道標題只有正確的。我在發佈之前嘗試過並獲得了它。我需要用其他詞彙來表達它,但是在沒有任何字母之前或之後的標準......這是否有意義Schwern? –

+0

@DeendayalGarg這確實更有意義!我已經更新了我的答案。 – Schwern

相關問題