gpt4 book ai didi

sql-server - SQL Server 不区分大小写的查询

转载 作者:行者123 更新时间:2023-12-02 20:17:09 24 4
gpt4 key购买 nike

我想在使用 SQL Server 比较查询中的字符串时忽略大小写。到目前为止,我可以使用这样的方法来做到这一点:

SELECT *
FROM Venue
WHERE
Name COLLATE Latin1_general_CI_AI Like '%cafe%' COLLATE Latin1_general_CI_AI

有没有办法设置一个全局指令,以便它影响每个查询?像这样的事情:

SET COLLATE Latin1_general_CI_AI;
SELECT *
FROM Venue
WHERE
Name Like '%this%';
SELECT *
FROM Venue
WHERE
Name Like '%that%';
...

谢谢!

最佳答案

Is there a way to set a global directive so that it would effect every query?

没有。

排序规则不是应用于查询的 session 属性,并且不能动态更改。

此请求的另一个问题是区分大小写不是一个可以自行启用或禁用的选项:它是排序规则的一个属性,就像重音敏感、宽度敏感、特定字母表的顺序一样排列在等中。查询可以比较多个字段,每个字段具有不同的排序规则。因此,即使您可以设置对 session 有效的排序规则,也可能会强制其他排序规则的列在甚至没有被要求不区分大小写的情况下动态转换排序规则。全局 session 设置也会影响排序(即 TOP(n)、ORDER BY 等),而不仅仅是比较。

由于问题是用户希望在每次执行时确定是否忽略部分排序规则,因此有几个选项,但所有选项都会带来一些性能损失:

  1. 在动态 SQL 中构造查询(或多个查询):

    DECLARE @SQL NVARCHAR(MAX),
    @Collation NVARCHAR(50);

    SET @Collation = '';
    IF (@CaseInsensitive = 1)
    BEGIN
    SET @Collation = N'COLLATE Latin1_general_CI_AI';
    END;

    SET @SQL = N'SELECT *
    FROM Venue
    WHERE Name ' + @Collation + N' LIKE ''%' + @SearchParam
    + N'%'' ' + @Collation;

    EXEC(@SQL);
  2. 将每个字符翻译为单字符范围内的大写和小写对。这可以在应用层中针对正在搜索的参数值来完成:

    • 默认区分大小写(不执行任何操作):
      @SearchParam = '这个'
    • 对于不区分大小写:
      @SearchParam = '[tT][hH][iI][sS]'
  3. 强制所有内容都相同。假设不区分大小写的选项是传入的附加参数:

    SELECT *
    FROM Venue
    WHERE CASE @CaseInsensitive
    WHEN 1 THEN LOWER(Name)
    ELSE Name
    END
    LIKE
    CASE @CaseInsensitive
    WHEN 1 THEN '%' + LOWER(@SearchParam) + '%'
    ELSE '%' + @SearchParam + '%'
    END;

    或者,在查询之前执行LOWER():

    IF (@CaseInsensitive = 1)
    BEGIN
    SET @SearchParam = LOWER(@SearchParam);
    END;

    SELECT *
    FROM Venue
    WHERE CASE @CaseInsensitive
    WHEN 1 THEN LOWER(Name)
    ELSE Name
    END
    LIKE '%' + @SearchParam + '%';

关于sql-server - SQL Server 不区分大小写的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30196848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com