2014-04-16 27 views
0

嗨,我有以下數據的列,其中典型的數據看起來就像是:檢索列特定字符串中的SQL表

行1:RCS CARD:感謝您購買AT PICKň支付卡... 1820 FOR R371.71 ON 14-03-2013 AT 09:46。 AVAIL CREDIT R67。對於查詢請致電0861028889

第2排:RCS卡:謝謝您的購買,支付N卡支付... 6825對於R3061.93 ON 14-03-2013於09:45。 AVAIL CREDIT R39。對於查詢CALL 0861028889

我需要能夠從第1行和第2行中提取R371.71和R3061.93。最準確的方法是什麼?請記住,R的數量會在一行之間變化,所以一個簡單的子字符串將不起作用?

任何建議將是非常有益的。

感謝, 喬納森

+0

你想獲取那些在列中有這種文本模式的人嗎? –

+1

這是MySQL還是MS SQL Server?什麼版本? (它很重要,相信我:)) –

+0

更好的是閱讀行和字符串解析工作在應用程序腳本而不是SQL –

回答

1

好正確的方式做它是使用正則表達式在外部腳本/應用程序,因爲MySQL不支持正則表達式的子字符串。

如果你堅持使用SQL我能想到的唯一方法是通過假定字符串的開頭爲:

RCS CARD:感謝您購買AT PICKň支付卡

並忽略該部分。所以SQL應該是:

SELECT SUBSTR(t, LOCATE('FOR', t, 61)+5 ,LOCATE('ON', t, 61)-1-LOCATE('FOR', t, 61)-5) 
    FROM DATA 

我要再次使用正則表達式,但你可以看到它的工作在這個SQLFiddle:http://sqlfiddle.com/#!2/966ad/7

0

如果關注column具有一致的文本格式,你在問題中提到,然後您可以利用substring_index,locatesubstring函數來查找金額值。

select 
    -- column_name, 
    substring_index(substring(column_name, 
           locate('FOR R', column_name, 1) 
           + length('FOR R') 
           - 1 
        ), ' ', 1 
) as amount 
from table_name 
where 
    column_name like '%RCS CARD: THANK YOU FOR YOUR PURCHASE AT PICK N PAY ON CARD%'; 

演示 @MySQL 5.5.32 Fiddle

如果你想不帶前綴'R'只提取金額,然後,從上面的查詢中刪除'-1'線。

相關問題