【问题标题】:Is there an exact string compare in T-SQL?T-SQL 中是否有精确的字符串比较?
【发布时间】:2014-03-06 12:35:30
【问题描述】:

我已经搜索了很多答案,但我没有找到以下简单任务的解决方案:

我有一个很长的 TextString,想在其中查找与字符串“Text”完全匹配的内容。

TextString LIKE '% Text %'

给出所有出现的“文本”和“文本”,也在一个单词内开始和/或结束。我只希望出现带有前后“”的“文本”(区分大小写)。

我知道LIKE= 对SPACES 的行为,因此无需再次解释,因为它已在本网站的其他地方进行过。

【问题讨论】:

    标签: sql-server tsql sql-like equality


    【解决方案1】:

    您是专门询问 Microsoft SQL Server 的吗?如果是这样……

    “Like”比较的行为取决于您为数据库(或表)设置排序规则的方式。如果您有区分大小写的排序规则,那么“Like”将以区分大小写的方式运行。

    但是,可以根据具体情况覆盖此行为:

    SELECT MyField FROM MyTable 
    WHERE MyField COLLATE Latin1_General_CS_AS LIKE '% Text %';
    

    【讨论】:

    • 谢谢!是的,我指的是 MS SQL。现在为前面和后面的空白。我如何避免 SQL 在评估 LIKE 时忽略它们?
    • 我预计需要更长的时间。如果性能是一个问题,那么 SQL Server 全文搜索将是一个不错的选择。
    • 也不会返回text is the first word
    【解决方案2】:

    试试这个:

    测试数据。

    declare @t table (word nvarchar(50))
    
    insert into @t
    values (' text '), (' Text '), ('text '), (' text'), (' other '), (' text in large string'), ('xxxxxtext'),('xxxxxtext '), ('xxxx text') string')
    

    相关查询。

    select * from @t
    
    where word like '%' + ' text ' + '%'
    

    返回:

     text 
     Text 
     text in large string
    

    【讨论】:

    • 另外,您可能需要考虑 Holf 回答的排序规则。
    • 您介意检查以下值吗: ('xxxxxtext'), ('xxxxxtext '), (xxxx text') ?所有这三种情况都不应该满足“% text %”的测试
    • 不返回这些值。
    • 这不会返回text is the first word
    猜你喜欢
    • 2020-01-26
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 2015-06-17
    相关资源
    最近更新 更多