【问题标题】:regexp_replace to extract from string containing -regexp_replace 从包含 - 的字符串中提取
【发布时间】:2021-03-19 21:36:18
【问题描述】:

用这个拉我的头发。任何帮助或指导将不胜感激。

列值:

u-165645,c-934846,f-598715,one, appple
c-997556.41,test,u-4404932, testing,two

尝试提取以“c-”开头的值。 从上面的例子中,提取出来的是:

934846
997556.41

【问题讨论】:

  • 你使用什么语言?
  • 你所追求的值在一列中可以出现多少次?至少一次?零个还是更多?既然你提到了专栏,那么这些数据是否存储在数据库中?需要更多信息才能获得准确的答案。到目前为止,您尝试过什么?
  • vmp:语言是 oracle sql。谢谢!
  • Gary_w:c-1234 只能出现一次,但可以出现在字符串中的任何位置,以逗号分隔。谢谢!
  • Gary_w:c-1234 只能出现一次,但可以出现在字符串中的任何位置,以逗号分隔。例如,如果应用于 u-16445、c-194846.41、f-99899,则结果应为 194846.41。谢谢!

标签: oracle regexp-replace


【解决方案1】:

试试这个。 WITH 子句只是使用公用表表达式 (CTE) 设置您的数据。正则表达式使用捕获的组来返回“c-”后跟逗号或行尾的内容,因此模式出现在字符串中的哪个位置无关紧要。

WITH tbl(ID, DATA) AS (
  SELECT 1, 'u-165645,c-934846,f-598715,one, appple' FROM dual UNION ALL
  SELECT 2, 'c-997556.41,test,u-4404932, testing,two' FROM dual
)
SELECT ID,
       REGEXP_SUBSTR(DATA, 'c-(.*?)(,|$)', 1, 1, NULL, 1) c_element
FROM tbl;


        ID C_ELEMENT                              
---------- ---------------------------------------
         1 934846                                 
         2 997556.41                              

2 rows selected.

【讨论】:

  • 宾果游戏!谢谢加里_W。我将使用您的解决方案来了解您是如何做到的。
【解决方案2】:

你捕获:

c-([*]*)

替换为

\1

我不知道您使用的是哪种语言或编辑器...我在 Notepad++ 上试过这个

【讨论】:

  • 当应用于 u-16445,c-194846.41,f-99899,one 结果是 u-16445,194846.41,f-99899,one 但它应该只是 194846.41。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-05-13
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
相关资源
最近更新 更多