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

ha5z0ras  于 2022-12-28  发布在  其他
关注(0)|答案(9)|浏览(166)

我在表中有以下数据
价格订单发货
价格订单发货入站
价格订单发货出站
在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%'
7uzetpgm

7uzetpgm1#

用这样的东西-

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

kcrjzv8t2#

像这样。

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

在postgresql中。

ve7v8dk2

ve7v8dk23#

请参阅以下与不区分大小写搜索-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%'
mo49yndu

mo49yndu4#

您可能应该使用SQL_Latin1_General_Cp1_CI_AS_KI_WI作为您的排序规则。您在问题中指定的排序规则明确区分大小写。
您可以看到排序规则here的列表。

smdnsysy

smdnsysy5#

在几乎所有的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%')
pengsaosao

pengsaosao6#

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

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

注:- Oracle

gab6jxml

gab6jxml7#

这是我使用的解决方案。

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

这也将检查子字符串。总的来说,这是我从互联网上遇到的最好的解决方案。我使用相同的实现子字符串大小写不敏感搜索表的列。

nwo49xxi

nwo49xxi8#

备选和最佳解决方案:
你也可以使用一个特定的"排序规则",比如utf8〉utf8_unicode_ci,这样所有查询就不区分大小写了,但是数据在某些地方可以是大写的,所以只要确保没有可能有不同大小写的孪生查询(比如使用UNIQUE列来确保)。
查询示例:
https://prnt.sc/1vjwxd1
使用的表格设计和排序:https://prnt.sc/1vjx3h5.
"一个好的数据库设计可以为您节省大量的查询工作"-我:)

bqucvtff

bqucvtff9#

LIKE和ILIKE允许在基于字符的列数据中进行模式匹配。它们的语法相同,但LIKE区分大小写,而ILIKE不区分大小写。我使用的是postgresql,它对我来说很好用。即
第一个月

相关问题