【问题标题】:How to Extract Numeric Range from Text in SQL如何在 SQL 中从文本中提取数值范围
【发布时间】:2016-03-16 05:46:24
【问题描述】:

我对 SQL 相当陌生,我正在尝试从 ORACLE DB 中提取一些数据。我的目标是返回查询值位于表中“AA_SYNTAX”列指定的范围内的行。

例如:

如果“AA_SYNTAX”列是“p.G12_V14insR”并且我的搜索值为 13,我想返回该行。此列组织为 p.%number_%number%。所以基本上我想从这个列返回两个数值,看看我的查询值是否在它们之间。

我有我需要的所有表和所有东西,只是不知道如何构建这样的查询。我知道在正则表达式中我会做一些类似“\d+”的事情,但我不确定如何将它翻译成 SQL。

谢谢

【问题讨论】:

  • 数值范围!请注意!!因为数字范围和正则表达式不能齐头并进。
  • 我可能会像 stackoverflow.com/questions/3968178/… 那样使用 regex_Replace 两次。一次用于 _ 之前,一次用于 _ 之后,然后将其用作您的 where 子句...where AA_Syntax between RegEx1Eval and regEx2Eval

标签: regex oracle


【解决方案1】:

使用 Oracle,您可以use Regular Expressions to extract a number from the string

更具体地说,我会调查REGEXP_SUBSTR

使用上面示例中给出的日期,您可以使用:

with cte as
(
    select 'p.G12_V14insR' as AA_SYNTAX from dual
)

select 
    REGEXP_SUBSTR(AA_SYNTAX,'p\.[[:alpha:]]+([[:digit:]]+)', 1, 1, NULL, 1) as Bottom 
    ,REGEXP_SUBSTR(AA_SYNTAX,'\_[[:alpha:]]+([[:digit:]]+)', 1, 1, NULL, 1) as Top 
from cte

我相信您可以稍微清理一下正则表达式,但是,鉴于此,Top 的值是 14,Bottom 的值是 12。

希望这有助于您朝着正确的方向前进。

【讨论】:

  • 非常感谢。我想我了解这是如何工作的,但是如何将硬编码的“p.G12_V14insR”更改为表中列的值。如:“DB.TABLE.COLUMN as AA_SYNTAX from dual”
  • 正如您所期望的,这是一个普通的select 声明。只需按照您的规则选择它。
  • 只是不要从 cte 中选择 - 我用它来简单地创建一些可供选择的东西 - 从你的表中选择...... SELECT REGEXP_SUBSTR(AA_SYNTAX, ... FROM MyTable ....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2019-07-23
  • 2021-08-21
  • 2014-01-24
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
相关资源
最近更新 更多