从SQL表中的列中检索特定字符串

时间:2014-04-16 14:08:19

标签: mysql sql sql-server

您好我有以下数据列,其中典型数据如下:

第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金额会在行之间发生变化,因此简单的子字符串将不起作用吗?

任何建议都会非常有用。

谢谢, 乔纳森

2 个答案:

答案 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_indexlocatesubstring函数来查找金额价值。

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'行。

相关问题