亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Oracle中進行不區分大小寫的搜索

在Oracle中進行不區分大小寫的搜索

暮色呼如 2019-07-29 16:04:41
在Oracle中進行不區分大小寫的搜索LIKE和其他比較運算符=等的默認行為區分大小寫。是否有可能使它們不區分大小寫?
查看完整描述

3 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

在不使用全文索引的情況下,有三種主要方法可以在Oracle中執行不區分大小寫的搜索。

最終,您選擇的方法取決于您的個人情況; 要記住的主要事情是,為了提高性能,您必須正確索引以進行不區分大小寫的搜索。

1.對你的專欄和你的字符串進行相同的處理。

您可以使用UPPER()或強制所有數據都是相同的大小寫LOWER()

select * from my_table where upper(column_1) = upper('my_string');

要么

select * from my_table where lower(column_1) = lower('my_string');

如果column_1未編入索引,upper(column_1)或者lower(column_1)視情況而定,則可能會強制進行全表掃描。為了避免這種情況,您可以創建基于函數的索引。

create index my_index on my_table ( lower(column_1) );

如果你正在使用LIKE,那么你必須連接%你正在搜索的字符串。

select * from my_table where lower(column_1) LIKE lower('my_string') || '%';

這個SQL小提琴演示了所有這些查詢中發生的事情。請注意解釋計劃,它指示何時使用索引以及何時使用索引。

2.使用正則表達式。

從Oracle 10g起REGEXP_LIKE()可用。您可以指定_match_parameter_ 'i',以便執行不區分大小寫的搜索。

要將此作為相等運算符使用,必須指定字符串的開頭和結尾,用克拉和美元符號表示。

select * from my_table where regexp_like(column_1, '^my_string$', 'i');

為了執行LIKE的等效,可以刪除這些。

select * from my_table where regexp_like(column_1, 'my_string', 'i');

請注意這一點,因為您的字符串可能包含正則表達式引擎將以不同方式解釋的字符。

除了使用REGEXP_LIKE()之外,此SQL Fiddle顯示相同的示例輸出。

3.在會話級別更改它。

所述NLS_SORT參數控制訂購歸類序列和各種比較運算符,包括=和類似物。您可以通過更改會話來指定二進制,不區分大小寫,排序。這意味著在該會話中執行的每個查詢都將執行不區分大小寫的參數。

alter session set nls_sort=BINARY_CI

如果您想指定不同的語言,或者使用BINARY_AI進行重音不敏感搜索,那么有很多關于語言排序和字符串搜索的附加信息。

您還需要更改NLS_COMP參數; 報價:

遵循NLS_SORT參數的確切運算符和查詢子句取決于NLS_COMP參數的值。如果運算符或子句不遵循由NLS_COMP確定的NLS_SORT值,則使用的排序規則是BINARY。

NLS_COMP的默認值是BINARY; 但是,LINGUISTIC指定Oracle應該注意NLS_SORT的值:

WHERE子句和PL / SQL塊中所有SQL操作的比較應使用NLS_SORT參數中指定的語言排序。要提高性能,您還可以在要進行語言比較的列上定義語言索引。

所以,再一次,你需要改變會話

alter session set nls_comp=LINGUISTIC

如文檔中所述,您可能需要創建語言索引以提高性能

create index my_linguistc_index on my_table 
   (NLSSORT(column_1, 'NLS_SORT = BINARY_CI'));


查看完整回答
反對 回復 2019-07-29
?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

也許你可以嘗試使用

SELECT user_nameFROM user_masterWHERE upper(user_name) LIKE '%ME%'


查看完整回答
反對 回復 2019-07-29
  • 3 回答
  • 0 關注
  • 1433 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號