如何匹配SQL server中不包括括号之间差异的文本?

如何匹配SQL server中不包括括号之间差异的文本?,sql,sql-server,Sql,Sql Server,我有一个审计日志表,它有一系列字符串,如 “一些文本[详细信息]更多文本” [details]前后的模式指示审计跟踪条目类型。括号中的文字表示其用途。我想创建一个查询,只查找我要查找的审核条目。我本想使用以下类似“一些文本[%]更多文本”的内容,但似乎不起作用 当我运行下面的查询时,它将检索预期的结果+更多 select top 1000 * from Table where NAME like 'Some Text%' 当我尝试 select top 1000 * from Table wh

我有一个审计日志表,它有一系列字符串,如

“一些文本[详细信息]更多文本”

[details]前后的模式指示审计跟踪条目类型。括号中的文字表示其用途。我想创建一个查询,只查找我要查找的审核条目。我本想使用以下类似“一些文本[%]更多文本”的内容,但似乎不起作用

当我运行下面的查询时,它将检索预期的结果+更多

select top 1000 *
from Table
where NAME like 'Some Text%'
当我尝试

select top 1000 *
from Table
where NAME like 'Some Text[%'

无需返回,因为

括号在正则表达式中具有特殊的语法含义。因此,如果要在查询中使用括号,则需要将其转义:

select top 1000 *
from Table
where NAME like 'Some Text[[]%'

特殊字符可以放在括号内进行转义。在这种情况下,开口括号本身需要放在括号内,即
[[[]

如果您将在stackoverflow中花些时间,许多帖子将回答您的问题。请参见下文

您需要使用
[]
括号将文本用特殊字符括起来

查询现在看起来像:

select top 1000 *
from Table
where NAME like '[Some Text[]%'


尝试下面的t-sql代码:

create table dbo.tblTest (ID int IDENTITY(1, 1), strings varchar(200))

insert dbo.tblTest
select 'i have to find this text excluding [these strings inside the brackets]'
union all select '[don''t include these texts inside the brackets]. but include these!'
union all select 'why can''t i search for these, but [not these]? nothing seems to work when brackets are involved. :('

select *
from dbo.tblTest

DECLARE @stringToSearchFor VARCHAR(200) = 'nothing seems'

SELECT t.*
FROM dbo.tblTest t
    JOIN
        (SELECT nobrackets.*
        FROM
            (SELECT cleanString = REPLACE(t.strings, SUBSTRING(t.strings, CHARINDEX('[', t.strings), CHARINDEX(']', t.strings) - CHARINDEX('[', t.strings) + 1), '')
                , t.ID
            FROM dbo.tblTest t) noBrackets
        WHERE noBrackets.cleanString LIKE CONCAT('%', @stringToSearchFor, '%')) tNoBracket ON tNoBracket.ID = t.ID

您好,您是否正在尝试搜索该列中的值(不包括打开([)和关闭(])括号内的字符串)?
select top 1000 *
from Table
where NAME like 'Some Text![%] more text' ESCAPE '!'
create table dbo.tblTest (ID int IDENTITY(1, 1), strings varchar(200))

insert dbo.tblTest
select 'i have to find this text excluding [these strings inside the brackets]'
union all select '[don''t include these texts inside the brackets]. but include these!'
union all select 'why can''t i search for these, but [not these]? nothing seems to work when brackets are involved. :('

select *
from dbo.tblTest

DECLARE @stringToSearchFor VARCHAR(200) = 'nothing seems'

SELECT t.*
FROM dbo.tblTest t
    JOIN
        (SELECT nobrackets.*
        FROM
            (SELECT cleanString = REPLACE(t.strings, SUBSTRING(t.strings, CHARINDEX('[', t.strings), CHARINDEX(']', t.strings) - CHARINDEX('[', t.strings) + 1), '')
                , t.ID
            FROM dbo.tblTest t) noBrackets
        WHERE noBrackets.cleanString LIKE CONCAT('%', @stringToSearchFor, '%')) tNoBracket ON tNoBracket.ID = t.ID