2012-07-30 316 views
0

我試圖構造一個SQL查詢,查找多個不同的事情,我認爲類似的命令是實現這一像命令SQL

查詢行最好的辦法是:

where *field* like 'AB%'它列出所有instaces在它開始AB表....

當我嘗試並添加多個實例,雖然我得到一個錯誤信息,我想要做的東西像下面這樣:

where *field* like ('AB%','CD%','EF%') 

所以我得到的具體條目的字段以我提供的文本列表開頭

請問有人可以幫我解決這個問題嗎?

+0

粘貼一些實際的SQL代碼,請,那麼這將是我們更容易幫助你(編輯您的原職,並貼它在那裏)。 – Kjartan 2012-07-30 13:20:58

+0

大多數數據庫都支持正則表達式。你使用什麼數據庫引擎? – martin 2012-07-30 13:39:58

回答

1

WHERE *field* LIKE 'AB%' OR *field* LIKE 'CD%' OR *field* LIKE 'EF%'

+0

如果有100多個「喜歡」的例子有更有效的方法嗎? – 2012-07-30 13:41:18

5

你想OR

WHERE field LIKE 'AB%' 
    OR field LIKE 'CD%' 
    OR field LIKE 'EF%' 

如果你使用的是其他WHERE條款的標準,你需要使用圓括號括關閉或條款。

希望它可以幫助...

編輯:

您的評論後,你可以嘗試在你的WHERE條款使用regular expressions,尤其是REGEXP_LIKE

東西沿(未經測試)的線路:

SELECT * 
    FROM table 
WHERE regexp_like(field, '^(AB|CD|EF).*$') 
+0

如果有100多個「喜歡」的例子是否有更有效的方法? – 2012-07-30 13:41:09

+0

是的,您可以使用正則表達式:http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_regexp.htm – Ollie 2012-07-30 13:42:39

+1

請定義「更高效」。如果您使用超過100個LIKE篩選器運行查詢,那麼查詢性能似乎不太可能是您的首選。所以大概你的意思是「一個需要更少打字的解決方案」? – APC 2012-07-30 15:09:03

-1

如果你想與單串做到這一點,嘗試使用REGEXP:

WHERE *field* REGEXP 'AB(.*)|CD(.*)|EF(.*)' 
+0

這是無效的Oracle語法。 – Ollie 2012-07-30 13:54:37

0

如果您使用的是Oracle,你可以寫:

where regexp_like(t1, '^AB|^CD|^EF') 

+0

爲什麼?我對樣本數據進行了測試,似乎可行。 – martin 2012-07-30 14:09:23

+0

我的歉意,我測試了它,並破壞了我的示例代碼。它工作正常。 – Ollie 2012-07-30 14:11:09

0

你可以使用instr函數。如果發現你想在字符串的第一個位置的子串,它將返回1:

where instr(field,'AB') = 1 
OR instr(field,'CD') = 1 
OR instr(field,'ED') = 1