正しく形式化できなくなる前にこの質問があった場合は、お詫び申し上げます。テーブルにコード列があり、それをクエリしたいのですが、特定のコードでいくつかの要素を削除します。4から始まるコードの要素を取得したいが、6番目の数値が9(1121290)のコードの要素を含めないとします。
コード列には、最大長が8文字の数字の文字列が含まれています。411、427、428で始まる要素を除いて、4で始まるほとんどすべてのものを取得したいと思います。
正しく形式化できなくなる前にこの質問があった場合は、お詫び申し上げます。テーブルにコード列があり、それをクエリしたいのですが、特定のコードでいくつかの要素を削除します。4から始まるコードの要素を取得したいが、6番目の数値が9(1121290)のコードの要素を含めないとします。
コード列には、最大長が8文字の数字の文字列が含まれています。411、427、428で始まる要素を除いて、4で始まるほとんどすべてのものを取得したいと思います。
はい、次のようなクエリを実行できます:-
6桁のコードを持つ列要素があります。
1桁目が4または6桁目が9の要素をフェッチしています。
%
と_
フェッチに使用する必要があります。
SELECT element FROM "table" WHERE element LIKE '%4____9%';
これを試してみてください。
411、427、および428で始まる要素を除く4で始まるすべて:-
SELECT element FROM "table" WHERE element LIKE '%4__';
1桁目は4で、6桁目は9ではありません:これをテストしました。正常に動作しています。これを試してください:-
SELECT element
FROM "table"
WHERE element NOT LIKE '%_____9' and element LIKE '%4_____'
where句で各条件を簡単に説明するのが最も簡単な場合があります。
WHERE code like '4____9%' AND code NOT LIKE '411%' AND code NOT LIKE '427%' AND code NOT LIKE '428%'
追加の条件は、クエリの効率をそれほど損なうことはありません。とにかく、 4から始まるすべての行をスキャンする必要があります。
「CODE」フィールドがvarcharであり、SQL Serverを使用していると仮定すると、以下のクエリを使用できます。
select * from yourTable
where code like '4%'
AND CHARINDEX('9',code)<>6
これがよりコンパクトなバージョンです。
`SELECT * FROM table_name WHERE code IN ('4%') and code NOT IN ('411%','427%', '428%','_____9%');`