1

私の論理は間違っています。私の人生談。とにかく、私は次のクエリを持っていますが、1つの列の複数の文字列チェック中に失敗していると思います。AND演算子を使用して、1つの列の複数の文字列をチェックできるようにしたい。

たとえば、このメール「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)

リストにさらに多くのvularityを追加しますが、明らかに最初にロジックを修正する必要があります。

別の例として、現在、上記は次の電子メールを抑制していますが、抑制したくありません。

METALHEAD038@HOTMAIL.COM

BAND2FACEDKITTY@AOL.COM

ANGELFACE30_98@YAHOO.COM

TERESADICKSON921@HOTMAIL.COM

ROARINGARTICHOKE@TOMGREEN.COM

CERNOSEK@YAHOO.COM

4

2 に答える 2

1

すべての内部and'(小文字のもの)を'に変更しますor

クエリは有効なアドレスを選択しているため、除外を記述するより自然な方法は次のようになります。

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 に答える