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

sho*_*ave 115 sql sql-server case-insensitive ignore-case sql-like


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

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

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME LIKE '%PriceOrder%' 
Run Code Online (Sandbox Code Playgroud)

给出了所有上述数据,而

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME LIKE '%Priceorder%' 
Run Code Online (Sandbox Code Playgroud)

不给.

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

SELECT DISTINCT COL_NAME FROM myTable WHERE 
COL_NAME COLLATE latin1_general_cs LIKE '%Priceorder%'
Run Code Online (Sandbox Code Playgroud)

小智 204

使用这样的东西 -

SELECT DISTINCT COL_NAME FROM myTable WHERE UPPER(COL_NAME) LIKE UPPER('%PriceOrder%')
Run Code Online (Sandbox Code Playgroud)

要么

SELECT DISTINCT COL_NAME FROM myTable WHERE LOWER(COL_NAME) LIKE LOWER('%PriceOrder%')
Run Code Online (Sandbox Code Playgroud)

  • 我认为你应该总是将字符串大写(UPPER)作为最佳实践.谷歌"土耳其人" (14认同)
  • 想知道您的答案是否存在性能问题,方法是将列值转换为“ UPPER”或“ LOWER”大小写,然后使用“ LIKE”进行搜索? (2认同)
  • 不幸的是,这种方法会导致全表扫描,如本文所述:https://alvinalexander.com/sql/sql-select-case-insensitive-query-queries-upper-lower。无法应用索引搜索,因为筛选列已由 UPPER/LOWER 函数修改。 (2认同)

小智 28

像这样。

SELECT DISTINCT COL_NAME FROM myTable WHERE COL_NAME iLIKE '%Priceorder%'
Run Code Online (Sandbox Code Playgroud)

在 PostgreSQL 中。

  • 这个问题被标记为 [tag:sql-server] 所以 postgres 答案不相关。 (6认同)
  • 这个答案拯救了我的一天 (3认同)

Mig*_*l-F 10

看到这个类似的问题和答案,用不区分大小写的搜索 - SQL服务器在where表达式中忽略大小写

尝试使用类似的东西:

SELECT DISTINCT COL_NAME 
FROM myTable 
WHERE COL_NAME COLLATE SQL_Latin1_General_CP1_CI_AS LIKE '%priceorder%'
Run Code Online (Sandbox Code Playgroud)