2011-07-30 21 views
0

我有一個包含一個字符串,如柱:僅選擇列中的撇號內的數據。

Approved By Smith, John For 'Core Authoring Files' 

我想我的選擇只返回

Core Authoring Files 

有沒有辦法只能選擇是單引號裏面的數據?

+0

你正在使用什麼數據庫。更可能的是,您將不得不使用編程語言(例如PHP)來獲取內部字符串,但可能會有一個特定數據庫的自定義庫,可能會有所幫助,或者可能會將其作爲db函數執行 –

回答

0

試試這個,但子字符串在不同的數據庫系統中實現稍有不同,所以您可能需要根據您使用的服務器進行一些修改。

select 
substring(column, charindex("'", column, 0) as begin), charindex("'", column, begin + 1) - begin)) as thestring 
from yourTable; 

這種工作方式是使用CHARINDEX函數查找字符串中的第一個引號字符的位置,然後找到字符串中的第二個引號字符開始在字符的第一次報價後,再減去那些位置來獲取你想要提取的字符串的長度。這兩個數字被傳遞給子字符串函數以獲取子字符串(列,起始位置,長度)。

希望這有助於

編輯

我想花一秒鐘從允許轉義引號字符將被存儲在數據庫勸阻你。這是一個乞求SQL注入攻擊的情況。如果您不熟悉,請在沿着這條路走得太遠之前研究sql注入。

+0

不明白爲什麼數據庫中未轉義的引用是一個問題。一旦他們在數據庫中,他們不是威脅。它在用戶輸入中的非轉義引用是潛在的危險。 – eaolson

+0

,因爲當你在這種情況下使用sql語句操作文本時,字符串可能會被sql解釋器解釋,一旦它命中,嵌入的代碼將執行它。 – Bueller

+0

真棒...謝謝..我採取了一些你的邏輯,並完成了這項工作。 – Shaun

0

在Postgresql中,使用regexp_replace字符串運算符很簡單。

例如

SELECT * FROM (
    SELECT 
     regexp_replace(title, E'.*\'\(.*\)\'.*', E'\\1') AS result 
    FROM 
     items) x 
WHERE 
    result IS NOT null;