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