SQL-在搜索字符串时忽略 case


我在一个表格中有以下数据
价格订单发货
价格订单发货
出口订单

在 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”或者“ price Order”时,它能工作,但是“ price order”或者“ PriceOrder”不能工作。 我已经尝试使用 COLLATE 执行下面的查询,但是不起作用。一定要让我知道我哪里做错了。

SELECT DISTINCT COL_NAME FROM myTable WHERE
COL_NAME COLLATE latin1_general_cs LIKE '%Priceorder%'
412856 次浏览

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

您可以看到排序规则的列表 给你

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

尝试使用这样的东西:

SELECT DISTINCT COL_NAME
FROM myTable
WHERE COL_NAME COLLATE SQL_Latin1_General_CP1_CI_AS 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%')

像这样。

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

在后面。

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

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

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

注:-甲骨文

替代和最佳解决方案:
您还可以使用特定的“排序规则”,如 utf8 > utf8 _ unicode _ ci。那么所有的查询对大小写都不敏感。但是在某些地方数据可以是大写的。因此,只要确保不存在具有不同情况的孪生子(比如使用 UNIQUE 列来确保)。

查询示例:
Https://prnt.sc/1vjwxd1
表格设计和排序使用: https://prnt.sc/1vjx3h5

“一个好的数据库设计可以为您在查询中节省大量的工作”-Me:)

这是我使用的解决方案。

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

这也将检查子字符串。 总的来说,这是我在互联网上找到的最好的解决方案。我使用同样的方法来实现对表列的子字符串不区分大小写的搜索。