2016-06-15 41 views
-2

我有一堆在我的數據庫行,看起來像這樣的外:SQL選擇所有的括號

123 'text i want (textidontwant)' 

,我試圖從與我想要的文字數據庫中選擇一切只要。

我知道我應該使用子字符串,但我不知道如何。

感謝您的幫助!

+0

工作痘痘更提供一個更好的例子。請閱讀[** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t這裏是[** START **](http ://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/),瞭解如何提高您的問題質量並獲得更好的答案。 –

+1

哪個數據庫? – abhi

+0

這很大程度上取決於你正在使用的數據庫類型,但通常情況下,如果你能保證第一個左括號是你不想要的分隔符,你可以做一個子字符串(field,0,<無論你的數據庫的函數('(')) –

回答

0

使用SUBSTR和定位或CHARINDEX

在MySQL

select substr(my_column, 1, locate('(', my_column)) 
from my_table 

在SQLSERVER

select substring(my_column, 1, charindex('(', my_column)) 
from my_table 
+0

'select subtring(my_column,1,charindex('(',my_column)) from my_table'for SQL Server –

+0

@PirateX謝謝..我已經更新了答案,但您應該發佈您的評論,如答案,以便可以正確評分 – scaisEdge

+0

我不確定是否值得另一個答案,更好的是更新你的,下次會照顧的 –

0
select ... where column_name like '%text that I want%' and column_name not like '%text that I do not want%' 

假設子串匹配是OK(%是通配符,至少在PostgreSQL的)

編輯:看來我誤解了這個問題,但我會離開這裏的答案的情況下,它可以幫助別人事情是這樣的...... :)

+0

這仍然會返回完整的字符串,「%」符號用於在模式前後定義通配符(丟失的字母) –

+0

啊,然後我誤解了 - 我想他想要所有包含一個部分但不包含其他部分的行,而不是他想要的實際子字符串... – ToVine

0

試試這個:

LEFT(column, CHARINDEX('(', column) - 1) 

這將得到列中的字符串的左邊部分,結束於第一個左括號(

所以,

123 'text i want (textidontwant)' 

將成爲

123 'text i want ' 

注意,尾隨空間將保持!要刪除尾隨的空間,使用RTRIM像這樣:

RTRIM(LEFT(column, CHARINDEX('(', column) - 1)) 

CHARINDEX是T-SQL只,如果你需要一個不同版本的SQL請編輯您的標記。)