繁体   English   中英

Oracle DB:如何编写忽略大小写的查询?

[英]Oracle DB: How can I write query ignoring case?

正如我在标题中所写的,我有 SQL 查询,在 Oracle DB 上运行,让我们说:

SELECT * FROM TABLE WHERE TABLE.NAME Like 'IgNoReCaSe'

如果我愿意,查询将返回“IGNORECASE”、“ignorecase”或它们的组合,如何做到这一点?

这可能吗?

Select * from table where upper(table.name) like upper('IgNoreCaSe');

或者,将下层替换为上层。

使用 ALTER SESSION 语句将比较设置为不区分大小写:

alter session set NLS_COMP=LINGUISTIC;
alter session set NLS_SORT=BINARY_CI;

如果您仍在使用 10gR2 版本,请使用以下语句。 有关详细信息,请参阅此常见问题解答

alter session set NLS_COMP=ANSI;
alter session set NLS_SORT=BINARY_CI;

您可以在 where 条件的两侧使用 lower 或 upper 函数

您还可以使用正则表达式:

SELECT * FROM TABLE WHERE REGEXP_LIKE (TABLE.NAME,'IgNoReCaSe','i');

您可以在查询中使用 upper() 函数,为了提高性能,您可以使用基于函数的索引

 CREATE INDEX upper_index_name ON table(upper(name))

您可以使用upperlower函数将这两个值转换为大写或小写:

Select * from table where upper(table.name) like upper('IgNoreCaSe')

要么

Select * from table where lower(table.name) like lower('IgNoreCaSe');

...还可以在查询之外转换为上限或下限:

tableName:= UPPER(someValue || '%');

...

Select * from table where upper(table.name) like tableName 

在 12.2 及更高版本中,使查询不区分大小写的最简单方法是:

SELECT * FROM TABLE WHERE TABLE.NAME COLLATE BINARY_CI Like 'IgNoReCaSe'

也不要忘记显而易见的,表中的数据需要有大小写吗? 您只能插入已经小写的行(或将现有的 DB 行转换为小写)并从一开始就完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM