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

Teradata regular expressions, 0 or 1 spaces

在 Teradata 中,我正在寻找一种正则表达式模式,它可以让我找到一些数字的模式,然后是 space 或者可能没有 space,然后是 'SF'.它应该 return 7 在以下两种情况下:

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

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

我有一个包含自由文本的专栏,我想提取平方英尺。但是,在某些情况下,数字和 'SF' 之间有一个 space,而在某些情况下则没有:

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

我正在尝试使用 REGEXP_INSTR 函数来查找起始位置。通过google,我发现第一个的模式是

'([0-9])+ SF'

第二次尝试模式时,我尝试

'([0-9])+SF'

我得到了错误

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

我还发现了一个 answer 类似的问题,但它们不适用于 Teradata。例如,我认为您不能使用 ?在 Teradata 中。

我会这样设计:

\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

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

试试这个:

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

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