SQL-在搜索字符串时忽略大小写

时间:2013-04-18 12:09:13

标签: sql sql-server case-insensitive sql-like ignore-case


我在表中有以下数据
PriceOrderShipped
PriceOrderShippedInbound
PriceOrderShippedOutbound

在SQL中,我需要编写一个查询表中的字符串。在搜索字符串时,它应该忽略大小写。对于下面提到的SQL查询

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

给出了所有上述数据,而

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

不给。

EG。当我搜索'PriceOrder'或'priceOrder'时它可以工作,但'priceorder'或'Priceorder'不起作用。 我已尝试使用COLLATE进行以下查询,但它不起作用。请告诉我哪里出错了。

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

7 个答案:

答案 0 :(得分:190)

使用类似的东西 -

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%')

答案 1 :(得分:9)

查看类似的问题和答案,以不区分大小写的方式进行搜索 - SQL server ignore case in a where expression

尝试使用以下内容:

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

答案 2 :(得分:4)

您应该使用SQL_Latin1_General_Cp1_CI_AS_KI_WI作为整理。您在问题中指定的那个明显区分大小写。

您可以看到归类列表here

答案 3 :(得分:4)

喜欢这个。

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

在postgresql中。

答案 4 :(得分:0)

like 运算符在几乎所有 SQL 编译器中都不区分大小写。如果您仍然没有得到区分大小写的结果,请使用 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%')

答案 5 :(得分:0)

如果有人使用 ORACLE 可以在数据库级别本身进行更改

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

注意:- 甲骨文

答案 6 :(得分:0)

正如我在我的项目中所经历的那样,我喜欢区分大小写搜索的结果和不区分大小写的 LIKE 结果。我不知道这是如何工作的,但我在我的项目中经历了这一点。使用休眠

用户

  1. 约翰
  2. 强尼
  3. jHames

当我使用

from Users userName LIKE 'jh%'

三个结果 当

 from Users userName like 'jh%'

结果只有 jhon 和 jhonny