簡體   English   中英

SQL- 搜索字符串時忽略大小寫

[英]SQL- Ignore case while searching for a string


我在表中有以下數據
價格訂單發貨
價格訂單發貨入站
價格訂單發貨出站

在 SQL 中,我需要編寫一個查詢來搜索表中的字符串。 在搜索字符串時,它應該忽略大小寫。 對於下面提到的 SQL 查詢

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME LIKE '%PriceOrder%' 

給出上述所有數據,而

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME LIKE '%Priceorder%' 

不給。

例如。 當我搜索“PriceOrder”或“priceOrder”時,它會起作用,但“priceorder”或“Priceorder”不起作用。 我已經嘗試使用 COLLATE 進行以下查詢,但它不起作用。 請讓我知道我哪里出錯了。

SELECT DISTINCT COL_NAME FROM myTable WHERE 
COL_NAME COLLATE latin1_general_cs LIKE '%Priceorder%'

使用這樣的東西 -

SELECT DISTINCT COL_NAME FROM myTable WHERE UPPER(COL_NAME) LIKE UPPER('%PriceOrder%')

要么

SELECT DISTINCT COL_NAME FROM myTable WHERE LOWER(COL_NAME) LIKE LOWER('%PriceOrder%')

看到這個類似的問題和答案,用不區分大小寫的搜索 - SQL服務器在where表達式中忽略大小寫

嘗試使用類似的東西:

SELECT DISTINCT COL_NAME 
FROM myTable 
WHERE COL_NAME COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%priceorder%'

您應該使用SQL_Latin1_General_Cp1_CI_AS_KI_WI作為排序SQL_Latin1_General_Cp1_CI_AS_KI_WI 您在問題中指定的那個明顯區分大小寫。

您可以在此處查看排序規則列表。

像這樣。

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME iLIKE '%Priceorder%'

在postgresql中。

如果有人使用 ORACLE 可以在數據庫級別本身進行更改

ALTER SESSION SET NLS_COMP=LINGUISTIC;  
ALTER SESSION SET NLS_SORT=BINARY_CI;  

注意:- 甲骨文

幾乎所有 SQL 編譯器中的 like 運算符都不區分大小寫。 如果您仍然沒有獲得區分大小寫的結果,請使用 iLike 運算符。 您也可以通過使用 Upper() 方法更改大小寫來比較它。

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME iLIKE '%PriceOrder%' 

或者

SELECT DISTINCT COL_NAME FROM myTable WHERE UPPER(COL_NAME) LIKE UPPER('%PriceOrder%')
SELECT DISTINCT COL_NAME FROM myTable WHERE LOWER(COL_NAME) LIKE LOWER('%PriceOrder%')

正如我在我的項目中所經歷的那樣,我喜歡區分大小寫搜索的結果和不區分大小寫的 LIKE 結果。 我不知道這是如何工作的,但我在我的項目中經歷了這一點。 使用休眠

用戶

  1. 約翰
  2. 約翰尼
  3. 哈姆斯

當我使用

from Users userName LIKE 'jh%'

結果所有三個和什么時候

 from Users userName like 'jh%'

結果只有 jhon 和 jhonny

替代和最佳解決方案:
您還可以使用特定的“排序規則”,例如 utf8 > utf8_unicode_ci。 那么所有查詢將不區分大小寫。 但數據在某些地方可能是大寫的。 因此,請確保沒有可能存在不同情況的孿生(例如使用 UNIQUE 列以確保)。

查詢示例:
https://prnt.sc/1vjwxd1
使用的表設計和整理: https : //prnt.sc/1vjx3h5

“一個好的數據庫設計可以為你節省大量的查詢工作” - 我 :)

這是我使用的解決方案。

SELECT * FROM TABLE WHERE COLUMN ~* '.*search_keyword_any_case.*'

這也將檢查子字符串。 總的來說,我從互聯網上遇到的最佳解決方案。 我使用相同的方法來實現對表列的子字符串不區分大小寫的搜索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM