用于查找仅包含特殊字符的行的SQL查询

Lij*_*ijo 9 sql sql-server

我正在使用SQL Server 2005.

我只需找出"Body"列中有特殊字符的那些行.在以下场景中,结果应该只是TemplateID = 2的行.我们如何为此编写查询?

CREATE TABLE #Template (TemplateID INT, Body VARCHAR(100))

INSERT INTO #Template (TemplateID,Body) VALUES (1,'abcd  1234')

INSERT INTO #Template (TemplateID,Body) VALUES (2,'#^!@')
Run Code Online (Sandbox Code Playgroud)

除以下之外的任何内容都是此方案的特殊字符

1) Alphabtes

2) Digits

3) Space
Run Code Online (Sandbox Code Playgroud)

Tom*_*m H 30

SELECT
    TemplateID,
    Body
FROM
    #Template
WHERE
    Body LIKE '%[^0-9a-zA-Z ]%'
Run Code Online (Sandbox Code Playgroud)

括号之间的东西表示数字(0-9),小写字母alpha(az),大写字母alpha(AZ)和空格."^"使其成为"NOT"中的一个.请注意,这与NOT LIKE'%[0-9a-zA-Z]%'不同

  • NOT LIKE 将仅返回不包含字母数字字符的行。在正则表达式中使用 not (^) 运算符将返回任何包含非字母数字字符的行。例如,“t%1”不会通过 NOT LIKE 返回,但会通过 LIKE ^ 返回。 (3认同)