您好我有以下数据列,其中典型数据如下:
第1行:RCS卡:感谢您购买PARD N PAY ON CARD ... 1820 for R371.71 ON 14-03-2013 at 09:46。 AVAIL CREDIT R67。 FOR QUERIES CALL 0861028889
第2行:RCS卡:感谢您购买PARD N PAY ON CARD ... 6825 FOR R3061.93 ON 14-03-2013 at 09:45。 AVAIL CREDIT R39。 FOR QUERIES CALL 0861028889
我需要能够从第1行和第2行中提取R371.71和R3061.93。最准确的方法是什么?请记住,R金额会在行之间发生变化,因此简单的子字符串将不起作用吗?
任何建议都会非常有用。
谢谢, 乔纳森
答案 0 :(得分:1)
正确的方法是在外部脚本/应用程序中使用regexp,因为MySQL不支持正则表达式子字符串。
如果你坚持使用SQL,我能想到的唯一方法是假设字符串以:
开头RCS CARD:感谢您在PICK N PAY ON CARD购买
然后忽略那部分。所以SQL应该是:
SELECT SUBSTR(t, LOCATE('FOR', t, 61)+5 ,LOCATE('ON', t, 61)-1-LOCATE('FOR', t, 61)-5)
FROM DATA
我再次使用regexp,但你可以看到它在这个SQLFiddle中工作:http://sqlfiddle.com/#!2/966ad/7
答案 1 :(得分:0)
如果问题中的column
具有您在问题中提到的一致文字格式,那么您可以使用substring_index
,locate
和substring
函数来查找金额价值。
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'
行。