仅选择显式值/正则表达式

时间:2015-10-09 11:29:48

标签: sql oracle plsql

我正在尝试从我的列中选择一个特定值。可能应该通过regexp函数来完成,但我一直遇到一些问题......

列名:Column1

Value1: 'Value\sdf90df\015'
Value2: 'Value\f213jdj\012'
Value3: 'Value\kjsd2ej\031'

有没有办法选择:sdf90df,f213jdj,kjsd2ej?

2 个答案:

答案 0 :(得分:1)

您可以使用regex_substr()执行此操作。像这样:

select replace(regex_substr(column1, '[\\][^\\]+[\\]', 0, 2), '\\', '')

答案 1 :(得分:1)

您可以使用此版本。

select regexp_replace( Column1, '.+\\([^\\]+)\\.+', '\1' )
  from yourTable

我正在做的是选择Column1,其函数根据正则表达式进行替换regexp_replace

我使用的正则表达式是.+\\([^\\]+)\\.+打破它:

.+\\ - 这会获得所有内容,直到找到\我们使用两个\\,因为它需要被挖掘。

([^\\]+) - 这一部分在括号内被理解为一个捕获组(我稍后会谈到它)我在这里说的是得到的所有不是\

并且

\\.+获得破折号和其他所有内容

我正在使用的regexp_replace有这样的参数:regexp_replace(source, regex, replacement)所以在我的替换中我使用了字符串\1,这意味着从正则表达式得到的只是组1

所以,你的字符串是'Value\sdf90df\015'在正则表达式上打破它:

Value\然后是sdf90df,这是第1组(由于进行了排便),然后是\015

在这个答案的第一个版本中,我使用了$1,因为一些正则表达式处理器使用它\1,但对于oracle,正确的表达式为\NUMBER来指定捕获基。

希望解释能澄清你的怀疑。