首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NZSQL/CODE -如何使用转义或使用[]

NZSQL/CODE -如何使用转义或使用[]
EN

Stack Overflow用户
提问于 2015-01-16 17:20:06
回答 1查看 1.8K关注 0票数 1

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

代码语言:javascript
复制
WHERE Col1 LIKE '%[^A-Z]%'

然后,它将遍历并查找A& Z之间的任何信件。我已经找到了使用Oracle中的转义函数来实现此操作的类似方法,但还未能找到TSQL的解决方案。

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-17 01:34:57

在一般情况下,Netezza与ANSI SQL 92标准非常接近,在本例中也是如此。唯一支持类似的元字符是‘%’和'_‘。

但是,有几个regex函数,它们允许您使用常规正则表达式进行匹配。例如,regex_instr:

代码语言:javascript
复制
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)

或对案件不敏感:

代码语言:javascript
复制
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 Extension对您可用,您可以使用标准的SUBSTR函数如下:

代码语言:javascript
复制
select * from regex_table where substr(col1,5,1) between 'A' and 'Z' order by col1;
 COL1
-------
 1234A
 1234B
 1234C
(3 rows)

或者如果你想让它不区分大小写:

代码语言:javascript
复制
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时,所有转义子句都允许您更改转义字符,当您想在LIKE子句中转义元字符时。通常这个角色是“\”。因此,如果您想匹配LIKE子句中的文字'%‘,而不是让它是通配符,则可以在其前缀加上'\’。使用转义子句将希望您使用如下所示的备用字符:

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27989335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档