【问题标题】:How to extract a specific string from a column如何从列中提取特定字符串
【发布时间】:2019-06-05 01:35:17
【问题描述】:

我正在尝试提取以 'A0' 开头的特定字符串,并将字符串 A0 以及 table 中的列中的其余 9 个值返回给我。我需要在表格的索赔说明列中提取一个授权号。

我正在尝试使用 regexp_substr 函数。我想在表格的 clm_notes 列中提取任何以 'A0' 开头的字符串。

SELECT 
regexp_substr(CLM_NOTES, '[^A0]+', 1,1) as auth_num
FROM claims_table

这就是列在表格中的样子

Clm_notes column 
New Auth from auth - A071869573

我想要的结果是提取以'A0'开头的字符串

A071869573

【问题讨论】:

  • 我有一个问题,输出的格式是否一致?我的意思是他们都有连字符?
  • 是的,格式总是一样的。
  • 为什么需要正则表达式?
  • 这是一个似乎符合我需要但仍不确定的功能。
  • 总是在同一个位置吗?字符串长度总是相同的吗?

标签: sql oracle regexp-substr


【解决方案1】:

您将需要以下内容:

SELECT 
regexp_substr(CLM_NOTES, 'A0.*$', 1,1) as auth_num
FROM claims_table

或者如果 A0 之后的所有字符都是数字:

SELECT 
regexp_substr(CLM_NOTES, 'A0[0-9]*$', 1,1) as auth_num
FROM claims_table

另一种更快的方法可能如下:

SELECT 
substr(CLM_NOTES, instr(CLM_NOTES,'A0')) as auth_num
FROM claims_table

【讨论】:

  • 谢谢你,这有效。我将不得不研究它为什么起作用。再次感谢。
  • 我建议尽可能针对您所追求的数据进行匹配,以避免误报。例如,匹配破折号、空格“A0”后跟 8 位数字:'- A0\d{8}'。您是否区分录取和推荐,或者一般来说是“A”?
  • 好点!谢谢加里。我没有考虑到这一点。我已经更新了声明以避免任何问题。再次感谢。
【解决方案2】:

与其匹配你想要的,不如匹配你不想要的并删除它:

select
    regexp_replace(CLM_NOTES, '.*- A0', 'A0') as auth_num
from claims_table

这匹配'- A0' 之前的所有内容,包括'A0',有效地删除'A0' 之前的所有内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    相关资源
    最近更新 更多