我的逻辑是错误的。我生命中的故事。无论如何,我有以下查询,我认为在一列中的多个字符串检查期间失败。我希望能够使用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)
我将在列表中添加更多的vularities,但显然需要首先纠正逻辑。
另一个例子,现在上面的内容抑制了以下电子邮件,但我不希望它们被抑制。
METALHEAD038@HOTMAIL.COM
BAND2FACEDKITTY@AOL.COM
ANGELFACE30_98@YAHOO.COM
TERESADICKSON921@HOTMAIL.COM
ROARINGARTICHOKE@TOMGREEN.COM
CERNOSEK@YAHOO.COM
答案 0 :(得分:1)
将所有内部and
- 小写的 - 更改为or
。
您的查询正在选择有效地址,因此编写排除项的更自然的方法如下:
AND NOT (A != 0 and B != 0)
使用布尔逻辑,要取消p AND q
,您需要否定这两个部分并将AND
更改为OR
:~p OR ~q
。
在你的情况下:
AND (A = 0 or B = 0)
答案 1 :(得分:0)
这些都是AND
条件。您没有一个当前允许包含dick
的电子邮件地址的子句,无论其余电子邮件是什么。如果您想允许dick
但不允许dick
... head
,您需要稍微考虑一下这一点。 E.g。
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%'
-- ...
)
)