Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Teradata正则表达式,0或1个空格_Sql_Regex_Teradata - Fatal编程技术网

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

Sql Teradata正则表达式,0或1个空格,sql,regex,teradata,Sql,Regex,Teradata,在Teradata中,我正在寻找一种正则表达式模式,它允许我找到一些数字的模式,然后是一个空格,或者可能没有空格,然后是“SF”。在以下两种情况下,它都应返回7: SELECT REGEXP_INSTR('12345 1000SF', pattern), REGEXP_INSTR('12345 1000 SF', pattern) 或者,如果有更简单的方法,我的实际目标是在这两种情况下提取1000,可能使用REGEXP\u SUBSTR。如果您需要更多详细信息,请参见下文 我有一个专栏,其中包

在Teradata中,我正在寻找一种正则表达式模式,它允许我找到一些数字的模式,然后是一个空格,或者可能没有空格,然后是“SF”。在以下两种情况下,它都应返回7:

SELECT
REGEXP_INSTR('12345 1000SF', pattern),
REGEXP_INSTR('12345 1000 SF', pattern)
或者,如果有更简单的方法,我的实际目标是在这两种情况下提取1000,可能使用REGEXP\u 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

我也发现了一个类似问题的答案,但它们不适用于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\u SUBSTR

试试这个:

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

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

尝试
'[0-9]+SF'
。将字符类放入一个组中并量化该组而不是字符类原子是没有意义的。如果不能使用
,则只需将一种模式或另一种模式与类似
[0-9]+SF |[0-9]+SF
的内容进行匹配。好的,尝试使用此模式-
'[0-9][0-9]*?SF code>,以匹配这两种情况。或者
'[0-9][0-9]*(|)SF'
来避免
的问题。好的,我也建议
'[0-9][0-9]*(|)SF'
。是什么让REGEXP|u SUBSTR函数只返回这里的数字?我在网上查看文档,没有这样的例子,它可以找到一个模式并获取模式的一部分。这是非常强大的。这正是
regexp\u substr
所做的-基于regex获取字符串的一部分。
(?=…)
是一种所谓的前瞻,即检查模式而不将其添加到结果中。顺便说一句,Teradata支持“Perl兼容正则表达式”(PCRE)语法,没有太多的docu,但有很多在线资源。后面有介绍吗?因为,我现在想做一些不同的事情,在那里我得到一个模式的结束部分。我已经尝试过在模式的前面部分使用(?=),但它不起作用。@Graphth:
(?非常感谢您的回答。它也很有帮助。