1

我的逻辑有问题。我一生的故事。无论如何,我有以下查询,我认为在一列中的多个字符串检查期间该查询失败。我希望能够使用AND运算符检查一列中的多个字符串。

例如,我想屏蔽此电子邮件“dick1sucker@gmail.com”,但我不想屏蔽“dickeynewman@gmail.com”。使用AND下面的运算符,如果发生任何一个字符串检查,就好像一条记录被抑制了,即使我已经用括号括住了语句。

/****** Script for CHECK DOMAIN SUFFIX AND VULGARITIES  ******/

SELECT EMAIL

INTO Matched_Table

FROM Matched_Table_TEMP

WHERE (RIGHT(RTRIM(EMAIL),4) IN ('.COM','.NET','.MIL','.GOV','.ORG','.BIZ') OR RIGHT(RTRIM(EMAIL),3) = '.US')

AND (CHARINDEX('DICK',EMAIL) = 0 and CHARINDEX('SUCKER',EMAIL) = 0)

AND (CHARINDEX('DICK',EMAIL) = 0 and CHARINDEX('HEAD',EMAIL) = 0)

AND (CHARINDEX('DICK',EMAIL) = 0 and CHARINDEX('CHOKE',EMAIL) = 0)

AND (CHARINDEX('DICK',EMAIL) = 0 and CHARINDEX('FACE',EMAIL) = 0)

AND (CHARINDEX('DICK',EMAIL) = 0 and CHARINDEX('NOSE',EMAIL) = 0)

AND (CHARINDEX('COCK',EMAIL) = 0 and CHARINDEX('SUCKER',EMAIL) = 0)

我将在列表中添加更多的漏洞,但显然需要首先纠正逻辑。

另一个例子,现在上面抑制了以下电子邮件,但我不希望它们被抑制。

METALHEAD038@HOTMAIL.COM

BAND2FACEDKITTY@AOL.COM

ANGELFACE30_98@YAHOO.COM

TERESADICKSON921@HOTMAIL.COM

ROARINGARTICHOKE@TOMGREEN.COM

CERNOSEK@YAHOO.COM

4

2 回答 2

1

将所有内部and's(小写字母)更改为or's。

您的查询正在选择有效地址,因此编写排除项的更自然方式如下:

AND NOT (A != 0 and B != 0)

使用布尔逻辑,要否定,p AND q您需要否定这两个部分并将其更改ANDOR: ~p OR ~q

在你的情况下:

AND (A = 0 or B = 0)
于 2012-07-11T20:09:04.853 回答
0

这些都是AND条件。dick无论电子邮件的其余部分是什么,您目前没有一个子句允许电子邮件地址包含所有内容。如果你想允许dick但不允许dick......head你需要稍微不同地考虑一下。例如

DECLARE @Email VARCHAR(255) = 'dickeynewman@gmail.com';

SELECT @Email
WHERE 
(
  RIGHT(RTRIM(@Email),4) IN ('.COM','.NET','.MIL','.GOV','.ORG','.BIZ') 
  OR RIGHT(RTRIM(@Email),3) = '.US'
)
AND 
(
  (@Email NOT LIKE '%DICK%') 
  OR 
  (@Email LIKE '%DICK%' 
    AND @Email NOT LIKE '%SUCKER%'
    AND @Email NOT LIKE '%HEAD%'
    -- ...
  )
)
于 2012-07-11T20:08:17.023 回答