【问题标题】:Look for specific special characters SQL Server 2008 R2查找特定的特殊字符 SQL Server 2008 R2
【发布时间】:2017-11-14 15:18:43
【问题描述】:

我需要在描述字段字符串/行中查找以下特殊字符的提及。其中一些很简单,但有些我不知道如何寻找:

Special characters:  < > { } [ ] " ' * = @ ~ | <Tab> (tab key) <Enter> (extra line (carriage return))

到目前为止我所拥有的:

select * from
table
where [Account description] like '[<>{}[]*=@~|]'

不知道如何识别以下特殊字符:

" (double quote)
' (single quote)
<Tab> (tab key) 
<Enter> (extra line (carriage return))

【问题讨论】:

    标签: sql-server sql-server-2008-r2 special-characters


    【解决方案1】:

    听起来您想要所有非字母数字字符?如果是这样,你可以使用

    declare @table table (id int identity (1,1), column1 nvarchar(64))
    insert into @table
    values
    ('<'),
    ('>'),
    ('{'),
    ('}'),
    ('['),
    (']'),
    ('"'),
    (''''),
    ('*'),
    ('='),
    ('@'),
    ('~'),
    ('|'),
    ('a' + char(10)),
    ('b' + char(13)),
    ('c' + char(9)),
    ('a'),
    ('A'),
    ('1')
    
    select *
    from @table
    where [Account description] like '%[^0-9a-zA-Z]%'
    

    否则,您需要明确列出它们并为特殊情况使用转义值...

    select * 
    from @table 
    where column1 like '%[<>{}![!]"''''*=@~|]%' ESCAPE '!'
    or column1 like '%' + char(10) + '%'
    or column1 like '%' + char(9) + '%'
    or column1 like '%' + char(13) + '%'
    

    【讨论】:

    • 为什么两个查询都拉取 a、b 和 c 行?另外,第二个查询中字符长度的“OR”语句是怎么回事?
    • 因为第一个是查找所有包含非字母字符的行。在 a、b 和 c 行中有非 aplha(制表符、CR 等)。第二个查询明确地查找每种情况。如果还有另一列,比如说特殊字符:,那么第一列会返回它,但第二列不会。 OR是处理回车、制表等条件。char(10)是换行,char(9)是制表符,char(13)是ASCII的回车。见:asciitable.com
    • 感谢您的深入回应。
    【解决方案2】:

    也许你可以尝试这样的事情:

    select * from table
    where [Account description] like '[<>{}[]*=@~|]' 
    and [Account description] like '%''%'
    and [Account description] like '%'+CAST(X'09' AS TEXT)+'%'
    and ([Account description] like '%'+char(13)+'%'
    or [Account description] like '%'+char(10)+'%)
    

    但我认为会很慢。

    【讨论】:

    • 这不适用于括号,我会包括 %% 否则你只会找到 only 该值存在的列
    • @scsimon 好吧,我只尝试为 " (双引号) ' (单引号) (tab key) (extra line (carriage return)) 解决这个问题
    • 别担心,我只是在观察,因为您的逻辑混乱。
    • 我更新了我的问题。我想识别描述列字符串中的特殊字符。
    猜你喜欢
    • 2013-03-25
    • 2010-12-10
    • 2015-02-15
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多