• ベストアンサー

【Access】先頭2文字が条件に該当するレコードを削除する方法について

下記のテーブルがある場合、下記のSQL文を実行すると、 3200~3299のレコードが削除されました。 これを3000~3999のレコードを削除するようにすれば宜しいでしょうか? なおSQL文の「3200」の箇所に「32000」と入力した際は、 32000~32999のレコードを削除したいと思います。 【SQL文】 DELETE * FROM TABLE WHERE key Like Left(3200,2) & '*' 【テーブル(TABLE)の中身】 key 3000 ~ 3999 30000 ~ 39999 ちなみにテーブルのkey列は数値型のため、数値の前に0を付加する事はできませんでした (なお文字列型に変更する事は出来ません)。 「WHERE key Like Left(3200,2) & '*'」を変更すれば解決するかと思いますが、 どのように記述すればよいか思いつきませんでした。 その為、何か良い手をご存知の方がいらっしゃいましたら、アドバイスをいただければと思います。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Ambition
  • ベストアンサー率49% (43/87)
回答No.3

keyに入る値は5桁までという前提なら、こんな感じでできませんか? いったんkeyの値をすべて5桁の前ゼロ文字に読み替えてから抽出する発想です。 WHERE Right('00000' & Key,5) Like Left(Right('00000' & 3200,5),2) & '*'

iroha_168
質問者

お礼

ご回答ありがとうございます。 教えていただいたSQL文で意図した動作となりました。 桁数は現状4桁、ないしは5桁となります。 入力値を5桁の前ゼロにする事は思いつきましたが、レコードのkey列を5桁の前ゼロにするという発想は思いつきませんでした。 このたびはどうもありがとうございました。

その他の回答 (2)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

x=int(a/1000) DELETE * FROM TABLE WHERE key Like x & '???' というのはいかがでしょうか

iroha_168
質問者

お礼

ご回答ありがとうございます。 教えていただいたSQL文で意図した動作となりました。 桁数の調整を「x=int(a/1000)」で行い、残りを???にするという発想は思いつきませんでした。 このたびはどうもありがとうございました。

  • TALLY-HO
  • ベストアンサー率29% (103/354)
回答No.1

単純に値で絞ったらダメなのでしょうか? ●3000~3999のレコードを削除する場合 DELETE FROM TABLE WHERE key BETWEEN 3000 AND 3999; ●32000~32999のレコードを削除する場合 DELETE FROM TABLE WHERE key BETWEEN 32000 AND 32999;

iroha_168
質問者

お礼

ご回答ありがとうございます。 私の言葉足らずで申し訳ないのですが、上記のSQL文ですと、私のやりたい形にはならない感じです。 やりたい事は以下となります。 1. ソースの中に記述しているので、1つ(keyの桁数が4桁の場合と5桁の場合があるので、多くても2つ)のSQL文で実現したい。 2. 今回たまたま「Left(3200,2)」と書きましたが、「3200」には「3211」がくる場合もあれば、「12314」がくる場合もあります(ここは実際には変数の値が入るようになっており、その変数には任意の4桁~5桁の値が入ります)。 そしてその際、先頭2桁(合計が4桁の場合は先頭1桁、かつ5桁のレコードは対象外)が一致するすべてのレコードを削除したいと思います。 よろしくお願いします。

関連するQ&A

専門家に質問してみよう