Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在列中查找除允许之外的所有字符_Sql_Sql Server_Regex - Fatal编程技术网

Sql 在列中查找除允许之外的所有字符

Sql 在列中查找除允许之外的所有字符,sql,sql-server,regex,Sql,Sql Server,Regex,我有一个我一直在尝试的查询,它应该提取所有不包含我们不想要的字符的行 SELECT NID FROM NOTES WHERE NOTE LIKE '%[^0-9a-zA-Z#.;:/^\(\)\@\ \ \\\-]%' 应该返回不包含 0-9 a-z A-z . : ; ^ & @ \ / ( ) # 但每当我在下面添加其中一个时,它都会失败 $ [ ] ? 即使尝试通过\或[[来逃避它们,似乎也无法正常工作。我只能访问stock SQL install 它应该提取所有不包含我们

我有一个我一直在尝试的查询,它应该提取所有不包含我们不想要的字符的行

SELECT NID FROM NOTES WHERE NOTE LIKE '%[^0-9a-zA-Z#.;:/^\(\)\@\ \  \\\-]%'
应该返回不包含

0-9 a-z A-z . : ; ^ & @ \ / ( ) #
但每当我在下面添加其中一个时,它都会失败

$ [ ] ?
即使尝试通过\或[[来逃避它们,似乎也无法正常工作。我只能访问stock SQL install

它应该提取所有不包含我们不需要的字符的行

SELECT NID FROM NOTES WHERE NOTE LIKE '%[^0-9a-zA-Z#.;:/^\(\)\@\ \  \\\-]%'
要查找包含
x
的行,可以使用
LIKE

SELECT * FROM yourtable WHERE col LIKE '%x%'
SELECT * FROM yourtable WHERE col NOT LIKE '%x%'
要查找不包含
x
的行,您可以使用
不喜欢

SELECT * FROM yourtable WHERE col LIKE '%x%'
SELECT * FROM yourtable WHERE col NOT LIKE '%x%'
因此,您的查询应该使用
而不是
,因为您需要的行不包含以下内容:

SELECT NID FROM NOTES WHERE NOTE NOT LIKE '%[0-9a-zA-Z#.;:/^\(\)\@\ \  \\\-]%'

应该返回不包含

0-9 a-z A-z . : ; ^ & @ \ / ( ) #

否。由于开头的
^
,它返回的行中除这些字符外不包含字符。您列出的字符是允许的字符。

关于此问题的regex标记的注释。尽管LIKE的某些表达式看起来像regex,但它不是。我是SQL Server自己的regex-ish表达式。“它失败了":它是如何失败的?您是否收到错误消息?错误消息是什么?或者它是否运行但结果不正确?能否显示一些示例输入数据、您运行的完整查询、您得到的不正确结果以及您想要的结果?@MarkByers没有错误消息。它只返回任何行,尽管添加了不在允许范围(法式……等)您的问题非常不清楚。请明确说明1)数据库中的一些示例数据2)您希望从该示例数据返回哪些行,3)您的查询实际返回哪些行。@MarkByers我有数千行。我需要确保它们只包含某些字符。A-Z A-Z 0-9[](){}“'/\?@$%^&*!~:<>-”和空格。否则,我需要了解它们以消除它们,因为它们会导致另一个应用程序出现问题。坏数据不在上面列出的范围内。我的理解是,插入符号的作用与单词NOT相同。有没有关于正确转义[and]的想法?@iarp:不,这是两个完全不同的东西。
NOT
是一个布尔运算符。将它添加到where子句的前面会更改返回的行(不符合条件的行会被返回)。
[^…]
表示“除…之外的所有字符”。这是不一样的。您可以通过测试两者并查看它们是否给出不同的结果来轻松验证这一点。您需要首先了解基本情况。尝试了解
不是
的含义以及
[^…]
表示在您开始计算如何转义之前。如果您的基本查询错误,高级部分肯定无法工作。列出“不在指定范围([^a-f])或集合([^abcdef])内的任何单个字符。”.并且,随描述一起给出的示例符合我上面所做的,而不需要NOT。现在,当我阅读你的时,不喜欢[^…],它就像NOT,它将返回[]之间的所有内容。我不想要方括号内的任何内容,因此我使用^而不是NOT LIKE。@iarp:但你的建议不起作用!你说“我不想要”。这翻译成“WHERE not”。而“方括号内的任何内容”翻译成“[abc]”。在这个例子中,我现在阅读你的文章时,你永远不需要使用
^
”,而不是像[^…],而是像not not not,它会返回[]之间的所有内容“这不是真的。您可以通过测试来轻松验证这一点。
像“%[a]%”
不像“%[^a]]
给出不同的结果。第一个匹配
cat
,第二个不匹配。证明: