Teradata正则表达式,0或1个空格

时间:2017-08-18 18:59:13

标签: sql regex teradata

在Teradata,我正在寻找一种正则表达式模式,这种模式可以让我找到一些数字的模式,然后是空格或者没有空格,然后是SF'。它应该在以下两种情况下都返回7:

SELECT
REGEXP_INSTR('12345 1000SF', pattern),
REGEXP_INSTR('12345 1000 SF', pattern)

或者,我的实际目标是在两种情况下提取1000,如果有更简单的方法,可能使用REGEXP_SUBSTR。如果您需要,请在下面提供更多详细信息。

我有一个包含自由文本的列,我想提取平方英尺。但是,在某些情况下,号码和' SF'之间存在空格。在某些情况下,没有:

'other stuff 1000 SF'
'other stuff 1000SF'

我正在尝试使用REGEXP_INSTR函数来查找起始位置。通过谷歌,我找到了第一个

的模式
'([0-9])+ SF'

当我尝试第二种模式时,我尝试

'([0-9])+SF'

我收到了错误

SELECT Failed.  [2662] SUBSTR: string subscript out of bounds

我也发现了answer类似的问题,但他们不适合Teradata。例如,我认为你不能使用?在Teradata。

2 个答案:

答案 0 :(得分:2)

我会像这样模仿它:

\b(\d+)\s*[Ss][Ff]\b

\b    # word boundary
(\d+) # 1 or more digits (captured)
\s*   # 0 or more white-space characters
[Ss]  # character class
[Ff]  # character class
\b    # word boundary

Demo

答案 1 :(得分:2)

错误消息表明您使用的是SUBSTR,而不是REGEXP_SUBSTR

试试这个:

RegExp_Substr(col, '[0-9]*(?= {0,1}SF)')

找到多个数字后跟一个可选空格,后跟SF并提取这些数字。

相关问题