NZSQL/CODE - 如何使用 ESCAPE 或使用 [] 指定范围



我们试图找出是否有类似的函数/方法来使用范围而不是确切的字符来指定 LIKE 条件。在 TSQL 中,我们能够通过使用

WHERE Col1 LIKE '%[^A-Z]%'

然后,这将通过并查找A和Z之间的任何字母。通过使用 Oracle 中的 ESCAPE 函数,我已经能够找到类似的方法来做到这一点,但无法找到 TSQL 的解决方案。

任何帮助不胜感激!

Netezza SQL通常非常接近ANSI SQL 92标准,在这种情况下绝对如此。 唯一支持 LIKE 的元字符是"%"和"_"。

SQL 扩展工具包有几个正则表达式函数,可以通过允许你使用常规正则表达式进行匹配来实现这一点。例如,regex_instr:

select * from regex_table order by col1;                   
COL1
-------
 12340
 12345
 1234A
 1234B
 1234C
 1234a
 1234b
(7 rows)

select * from regex_table where regexp_instr(col1,'d{4}[A-Z]') > 0 order by col1;
 COL1
-------
 1234A
 1234B
 1234C
(3 rows)

或者对于不区分大小写:

select * from regex_table where regexp_instr(col1,'d{4}[A-Z]','i') > 0 order by col1;
 COL1
-------
 1234A
 1234B
 1234C
 1234a
 1234b
(5 rows)

对于您的特定示例,如果您的管理员不会提供 SQL 扩展工具包,则可以使用标准 SUBSTR 函数,如下所示:

select * from regex_table where substr(col1,5,1) between 'A' and 'Z' order by col1;
 COL1
-------
 1234A
 1234B
 1234C
(3 rows)

或者,如果您希望它不区分大小写:

select * from regex_table where upper(substr(col1,5,1)) between 'A' and 'Z' order by col1;
 COL1
-------
 1234A
 1234B
 1234C
 1234a
 1234b
(5 rows)

使用 Netezza 时,ESCAPE 子句将为您所做的一切就是允许您在想要转义 LIKE 子句中的元字符时更改转义字符。 通常此字符为"\"。 因此,如果要在 LIKE 子句中匹配文字"%"而不是将其作为通配符,则可以在它前面加上"\"。 使用 ESCAPE 子句希望使用如下所示的替代字符:

select * from regex_table;
 COL1
------
 %BC
 ABC
(2 rows)
select * from regex_table where col1 like '%BC';
 COL1
------
 %BC
 ABC
(2 rows)
TESTDB.ADMIN(ADMIN)=> select * from regex_table where col1 like '%BC';
 COL1
------
 %BC
(1 row)
select * from regex_table where col1 like '#%BC' escape '#';
 COL1
------
 %BC
(1 row)

相关内容

最新更新