我们试图找出是否有一个类似的函数/方法来指定一个类似的条件使用一个范围,而不是一个确切的牧师。在TSQL中,我们能够通过使用
WHERE Col1 LIKE '%[^A-Z]%'然后,它将遍历并查找A& Z之间的任何信件。我已经找到了使用Oracle中的转义函数来实现此操作的类似方法,但还未能找到TSQL的解决方案。
任何帮助都是非常感谢的!
发布于 2015-01-17 01:34:57
在一般情况下,Netezza与ANSI SQL 92标准非常接近,在本例中也是如此。唯一支持类似的元字符是‘%’和'_‘。
但是,有几个regex函数,它们允许您使用常规正则表达式进行匹配。例如,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 Extension对您可用,您可以使用标准的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时,所有转义子句都允许您更改转义字符,当您想在LIKE子句中转义元字符时。通常这个角色是“\”。因此,如果您想匹配LIKE子句中的文字'%‘,而不是让它是通配符,则可以在其前缀加上'\’。使用转义子句将希望您使用如下所示的备用字符:
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)https://stackoverflow.com/questions/27989335
复制相似问题