0

例のテーブル (Person_data)

Name   |   Area      |   Id
=============================== 
Jack   | A_102       |  102   
Roy    | Abc-34      |  109   
tom    | ABC6778     |  107    
Aly    | hj23        |  122   
Saly   | dsfds       |  342

Area 列に_or-またはAbcorが含まれていないすべての行を返すようなクエリが必要ABCです。

私のクエリ

Select * from Person_data 
where area not like '%-%' 
or area not like '%_%' 
or area not like '%Abc%' 
or area not like '%ABC%';
4

5 に答える 5

2
SELECT * 
FROM PersonData
WHERE area NOT LIKE '%-%'
    AND area NOT LIKE '%[_]%' -- brackets for special character matching
    AND area NOT LIKE '%Abc%' 
    AND area NOT LIKE '%ABC%';

他の人が述べているように、現在のクエリはおそらくnull以外のものを返すように見えるので、演算AND子ではなく演算子が必要になるでしょう。OR

また、SQL Serverの特殊なワイルドカード文字であるリテラルアンダースコアの一致をエスケープまたは括弧で囲む必要があります(意味的にはと同じです)。_NOT LIKE '%_%'LIKE ''

ここでもう1つ興味深いのは、との両方Abcを使用することです。これは、大文字と小文字を区別ABCする必要がある場合にのみ必要です。

于 2012-10-02T02:36:14.617 に答える
2

Area 列に「_」、「-」、「Abc」、または「ABC」が含まれていないすべての行を返します

ANDこれらの検索条件を'sと組み合わせる必要がありますが、問題は述語_で予約されているワイルドカードです。LIKEを使用してLIKE述語でエスケープする必要があります。または、のようなキーワード[]を使用してエスケープするために使用するエスケープ文字を決定することもできます 。したがって、リテラルのように扱われ、そのための標準的な方法です。ESCAPELIKE '%\_%' ESCAPE '\'

SELECT * 
FROM PersonData
WHERE area NOT LIKE '%-%'
AND area NOT LIKE '%\_%' ESCAPE '\'
AND area NOT LIKE '%Abc%' 
AND area NOT LIKE '%ABC%';

ここにSQL Fiddleのデモがあります

于 2012-10-02T02:27:37.253 に答える
0

あなたは本当に質問をしていませんでしたが、「OR」を「AND」にしたいと思います。

于 2012-10-02T02:22:48.017 に答える
0

OR を AND に置き換えます。これで、少なくとも 1 つのシンボルを含まないすべての行が取得されます。

于 2012-10-02T02:24:15.030 に答える
0

ANDOR 条件の代わりに WHERE 句の条件を使用する必要があります。

SELECT * 
FROM `Person_data` 
WHERE `area` NOT LIKE '%-%' 
AND `area` NOT LIKE '%_%' 
AND `area` NOT LIKE '%Abc%' 
AND `area` NOT LIKE '%ABC%';
于 2012-10-02T02:27:45.083 に答える