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
错误消息表明您使用的是 SUBSTR
,而不是 REGEXP_SUBSTR
。
试试这个:
RegExp_Substr(col, '[0-9]*(?= {0,1}SF)')
找到多个数字后跟一个可选的空白,然后是 SF
并提取这些数字。
在 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
错误消息表明您使用的是 SUBSTR
,而不是 REGEXP_SUBSTR
。
试试这个:
RegExp_Substr(col, '[0-9]*(?= {0,1}SF)')
找到多个数字后跟一个可选的空白,然后是 SF
并提取这些数字。