• ベストアンサー

DELETEの操作で (PostgreSQL)初心者

テーブルの中に日付(2002/02/02)、社員番号(10)、JOBno(1234)、種別番号(10)作業時間(8.00)の項目順に並んであり、数値が入っています。(カッコの数値は例です) このテーブルの中の2002/02/01から2002/02/15までのデータをDELETEさせたいの ですがまだよくわかってないので教えてください。  あと2002/02/16から2002/02/末日までのもわかればおねがいします。 (末日は28、29、30、31のパターンを別々にだせばよいのですかね?) DELETE FROM テーブル名 WHERE 2002/02/01....?(指定する条件がわかりません)

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

  • ベストアンサー
  • yuji
  • ベストアンサー率37% (64/169)
回答No.4

PostgreSQLについているマニュアルを読んでください。 ヒントだけ。 日付の場合には to_date関数を使って DATE型に変換します。 TO_DATE('2002/02/01','YYYY/MM/DD') ※対象のテーブルの日付列の型が質問文中に書いてありませんが、もし timestamp型なら TO_TIMESTAMP()関数を 使って変換します。 後は、WHERE句に指定するだけ。 DELETE .... WHERE 日付 BETWEEN TO_DATE(....) AND TO_DATE(...)

その他の回答 (3)

noname#1802
noname#1802
回答No.3

たびたび、、、ありました。 (参考URLを・・・・) where 日付 between '20020201' and '20020215' で問題ないようです。 (すいません "" ではないですね) http://www.rccm.co.jp/~juk/pgsql/tutorial-j.html こちらも参考下さい。

参考URL:
http://www.shonan.ne.jp/~nkon/iseminar/semi000222/kk.000222.txt
noname#1802
noname#1802
回答No.2

ちょっと解かり難い回答でした。ごめんなさい。。。 「次月1日の一日前」というのは、、 質問内容からすると 「2月末日は3月1日の1日前」 ( 2002/2/28 = 2002/3/1 - 1)です。 日付型の列であれば だいたい where 日付 <= "20020301" - 1 でできそうですが・・・・・・ これも PostgreSQLでは解かりません。。。

noname#1802
noname#1802
回答No.1

PostgreSQL が全く解からないのですが・・・ 標準的には delete from テーブル名 where 日付 between "20020201" and "20020215" ; あるいは delete from テーブル名 where 日付 >= "20020201" and 日付 <= "20020215" ; となります。。。。 あと、末日の算出方法ですが 「次月1日の1日前」が便利な算出方法かと思います。 どちらにしてもPostgreSQLでできるのかどうかは、 私にはわかりません。。 できることを祈っています。 (私も今後 PostgreSQlを使う予定ですので・・・・)

関連するQ&A

  • pgAdmin IIIでDELETEするためには・・(初心者です)

    pgAdmin IIIで新しいテーブルを作りSQL文の勉強をしているのですが、 DELETE文が実行できません。 ○○というテーブルにある×××という項目が1と2という数値の場合その行を削除するという場合、 DELETE ○○ WHERE ××× IN (1,2) で良いのでしょうか? ○○、×××ともに日本語でテーブルを作っています。 pgAdmin IIIの設定は特にいじっていません。 とりあえずテーブルを作ってSQL文を試したいと思ってやっているので、 DELETE文を実行する権限がないということはあるのでしょうか?

  • DELETE文とロックについて

    DELETEしようとしているレコードがロックされている場合は、削除せず すぐに処理を戻したいです。イメージ的にNOWAITが最適と思い →DELETE FROM テーブルA WHERE カラムA = 'A' NOWAIT としたいところですが、NOWAITはSELECT文でしか指定できないとのことなのでNGです。 SELECT文で抽出した条件のレコードを削除する場合 →DELETE FROM テーブルA WHERE カラムA =      (SELECT カラムA FROM テーブルA WHERE カラムA = 'A') と出来ます。 又、SELECT文でロック待機時間なしの場合 →SELECT カラムA FROM テーブルA WHERE カラムA = 'A' FOR UPDATE NOWAIT と出来ます。 これらを組み合わせて、ロックされているレコードを削除しようとした場合、 すぐにNGで制御を戻すように、次のように記載してみました。 →DELETE FROM テーブルA WHERE カラムA =    (SELECT カラムA FROM テーブルA WHERE カラムA = 'A' FOR UPDATE NOWAIT) なぜかNGになってしまいます(右カッコがありませんと言われます)。 なぜこの書き方が出来ないのでしょうか? 現在、一度該当のレコードをSELECT文でFOR UPDATE NOWAITをしてから DELETEをしています。 1つレコードを削除したいだけなのに、わざわざSELECT文と DELETE文を発行してしまっています。 こういう場合、他にどのような方法があるのでしょうか? 宜しくお願いします。

  • 「日付条件」のDELETEできない

    access2003で、下記のプログラムを作りました。 コメント文の、「jyuu条件」ではDELETEが出来るのですが、 本プログラムの「日付条件」では、DELETEされません。 なぜでしょうか? なお、gatuは、「日付/時刻型(日付(標準))」です。 Private Sub テーブル削除() Dim db As Database Dim mysql As String Dim gappi As Date Dim jyuu As Integer gappi = #4/15/2011# jyuu = 220 'mysql = "DELETE FROM fff WHERE jyu <" & jyuu & " ; " mysql = "DELETE FROM fff WHERE gatu <" & gappi & " ; " Set db = CurrentDb db.Execute (mysql) db.Close End Sub

  • PostgreSQLで表結合+DELETEしたい

    PostgreSQLで、テーブル(2)の情報をキーに(1)を削除したいのですが、エラーが出てしまいます。 どなたか解決策をご存知の方いらっしゃいましたら ご教授宜しくお願い致します。 _構造_____________________ テーブル(1)・・カラムA テーブル(2)・・カラムA、カラムB _SQL文_____________________ DELETE FROM (1) INNER JOIN (2) ON (1).カラムA= (2).カラムA WHERE (2).カラムB=X _エラーメッセージ__________ [Err] ERROR: syntax error at or near "INNER"

  • このようなDELETEはできますか?

    こんにちは。DELETE文の削除条件について教えてください。 例えば下記のような2つのテーブルがあったとします。 ATABLE KEY1(ID) KEY2(DATE) ・・・・・・・・・・ ------------------------------------------------ 100000 2004/09/01 ・・・・・・・・・・ 200000 2004/09/01 ・・・・・・・・・・ 300000 2004/09/01 ・・・・・・・・・・ BTABLE KEY1(ID) KEY2(DATE) CODE ・・・・・・・・・・ ------------------------------------------------ 100000 2004/09/01 0 ・・・・・・・・・・ 200000 2004/09/01 0 ・・・・・・・・・・ 300000 2004/09/01 1 ・・・・・・・・・・ この2つのテーブルで、BTABLEのCODEが1のレコードにKEYで関連付くATABLEのレコードを削除したいのです。 プログラムの中では対応できるのですが、SQL1文で実行させることはできるでしょうか? とりあえず下記のように作ってみました(いたずらに長いかもしれませんが)。 DELETE FROM ATABLE WHERE KEY1 IN (SELECT ATABLE.KEY1 FROM ATABLE,BTABLE WHERE ATABLE.KEY1 = BTABLE.KEY1 AND ATABLE.KEY2 = BTABLE.KEY2 AND BTABLE.CODE = 1) AND KEY2 IN (SELECT ATABLE.KEY2 FROM ATABLE,BTABLE WHERE ATABLE.KEY1 = BTABLE.KEY1 AND ATABLE.KEY2 = BTABLE.KEY2 AND BTABLE.CODE = 1) これで良い/悪い、もっと簡潔にできる、などありましたら是非お聞かせ願えますでしょうか? よろしくお願いします。

  • オラクルSQLについて

    初心者です。困っています。 テーブルC 日付_番号_ステータス 1/3____1_____Q 1/5____2_____R 1/6____5_____G 1/7____7_____P 1/20__ 9_____R 2/1___10_____R このようなテーブルを、1.日付順、2.番号順の優先順位で、選択していく為、下記のようなSQLを作成しました。 SELECT 番号 FROM テーブルC WHERE (TO_CHAR([日付],'yyyyMMdd') || [番号]) IN (select MIN((TO_CHAR([日付],'yyyyMMdd') || [番号])) FROM テーブルC WHERE (TO_CHAR([日付],'yyyyMMdd') || [番号]) > (SELECT (TO_CHAR([日付],'yyyyMMdd') || [番号]) FROM テーブルC WHERE [番号]=前回編集した番号)) ユニークなのは番号だけです。 これに、ステータス が RかPの場合 を加えたいだけなのですが、SQLが多くなりすぎて、困難になってしまいました・・・。 どなたかご教授頂ければ幸いです。

  • SQL : たしかに DELETE したの?

    ありがちな処理かと思いまして質問させていただきます。 SQLで DELETE を行う際、WHERE で絞り込んだ対象行がなくても、  「エラーは返ってこない」 ということですが、NOT FOUND判定はするのでしょうか。 ごく単純に、削除しようとしたデータが実際にあったのかを確認したいのです。 やろうとしている処理は、次のようなものです。 DELETE FROM a_tbl WHERE NOT EXISTS (SELECT row1 FROM b_tbl WHERE row1 = 'input_data' ) AND NOT EXISTS (SELECT row1 FROM c_tbl WHERE row1 = 'input_data' ); ようするに、他のテーブルに、すでにない行であることが前提で、 a_tbl から DELETE したことを確認したいのです。 Pro*C内で実行するのですが、一般に同じだと思います。 キホンのキかもしれませんが、よろしくお教えください。

  • PostgreSQLの「*」について・・?

    こんにちわ, 今PostgreSQLを勉強しています。 たとえば, SELECT * FROM table where field ~ 'a'; とすると,tableテーブルからfieldに「a」が入っている項目を抜き出す,となります。 これに SELECT * FROM table where field LIKE '*a'; とすると,エラーが出てしまいます。 *(ワイルドカード)の使用はどのようなときに使用するのでしょうか。PostgreではLinuxとは違う使用をすると書いてあったのですが,よくわかりません。 よろしくおねがいします。

  • PL/SQLのDELETE文について

    PL/SQLでDELETE文を書こうとしているのですが、 文法がわかりません。。。 分かる方がおられましたら、教えてくださいm(_ _)m 今、TABLE1を削除したいのですが、条件がいろいろあって、 以下のように書いてみたのですがダメでした。 こういう書き方は、できないんでしょうか・・・。 削除条件は、TABLE2に存在し、かつ、TABLE2のTENSUが0のもので、 TABLE3が存在しないものです。 DELETE TABLE1 FROM TABLE1 ,TABLE2 ,TABLE3 WHERE TABLE1.ID = TABLE2.ID AND TABLE2.TENSU = 0 AND Not Exists (SELECT TABLE3.ID FROM TABLE3 WHERE TABLE3.ID = TABLE2.ID) 説明が下手なので、うまく、伝わっているか、心配なのですが・・・、 よろしくお願いします。

  • postgreSQLで分からないことがあります。

    postgreSQLで分からないことがあります。 よろしくお願いします。 下にあるtblというテーブルがあったとき。 下のSQLを実行するとデータがうまく取れているんですが、 CURRENT_DATEは日付型でSUBSTRでとりだした日付は文字列 なのに何故正しく比較できているのでしょうか? 日付型の形式の文字列であれば、RDBMSがかってに日付型にしてくれるのでしょうか? tblテーブル *sdateとedateはtimestamp型です。 sdate      | edate | ----------------------------------------- 2010-5-1 10:00:00 | 2010-5-2 13:00:00| SELECT * FROM tbl WHERE CURRENT_DATE BETWEEN SUBSTR(sdate, 1, 10) AND SUBSTR(edate, 1, 10)