- ベストアンサー
Nヶ月前の1日を取得したいのですが
TAGOSAKU7の回答
Sub test() Dim strDmyDate As String Dim intYear As Integer Dim intMonth As Integer Dim intBeforMonth As Integer Dim datDate As String Dim strDate As String 'ダミーデータ strDmyDate = "20020107" '何ヶ月前? intBeforMonth = 6 'この場合6ヶ月前 '年月を抽出 intYear = Left(strDmyDate, 4) intMonth = Mid(strDmyDate, 5, 2) 'Nヶ月前の一日を、日付型で算出 datDate = DateSerial(intYear, intMonth - intBeforMonth, 1) 'フォーマット変換 strDate = Format(datDate, "yyyymmdd") End Sub 見せてもらったデータからすると、strDateの値をSQL文にそのまま使用できます。 ただ、文字列なので "select * from テーブル where 項目A >= '" & strDate &"'" といったように シングルコーテーションを忘れないようにしてください。
関連するQ&A
- 1週間後の日付を求めたい
テーブルにchar(6)でyymmdd形式の日付を格納する領域を作成しております。この格納された日付から1週間以上過ぎたもののみ抽出したいのですが、sqlの構文を上手く作成できず大変こまっております。 有識者様大変お手数ですがご教授を頂けないでしょうか?
- ベストアンサー
- PostgreSQL
- SQLの構文で質問です。
いつもお世話になっております。 SQLの構文で質問です。 テーブルを開いて、データの中から日付を絞って抽出したいのですが、 whereの後にどのような記述をすればいいのかわかりません。 なんとなく『>』を使ってやってみましたがうまく抽出できませんでした。 例えば、2008/12/01~2008/12/31の絞りで抽出できるようにしたいのですが。 SELECT * FROM 日付 WHERE (日付 2008 / 12 / 01 2008 / 12 / 31) すみません、SQLを使い始めて間もなく本を見てはいるのですがうまくいかないもので。 宜しくお願いします。
- ベストアンサー
- Windows XP
- データベースの検索について
ORACLE8.0.5において 日付を管理するテーブル(Work)において <構成> workday char(08) not null (key) work7day char(01) workym char(06) 上記の構成のテーブルにおいて 指定日付(例:20020125)から、5レコード目の データを抽出するときの、SQLの組み方を教えてください。 PLSQLを使用して、上記のDBをアクセスし、5レコード目 (レコードが持っている営業日)を抽出しようとしています。よろしくお願いします。
- ベストアンサー
- その他(データベース)
- 月間集計ですべての日付を抽出するには
Oracle9iで開発をしております。 月間集計をするにあたり、SQLをどのように書けばよいのか質問させていただきたいと思います。 たとえば、COUNTテーブルというテーブルがあり 年月日 カウント数 2005/09/01 1000 2005/09/01 1000 2005/09/02 2000 2005/09/03 3000 2005/09/05 5000 2005/09/06 6000 というようにデータが入っていたとします。 現在、 SELECT 年月日, SUM(カウント数) FROM COUNTテーブル WHERE COUNT_DATE BETWEEN TO_DATE(to_char(?||'/'||?||'/01')) AND LAST_DAY(TO_DATE(to_char(?||'/'||?||'/01'))) GROUP BY 年月日 としていまして、抽出されるデータは 2005/09/01 2000 2005/09/02 2000 2005/09/03 3000 2005/09/05 5000 2005/09/06 6000 となります。 ここで、2004/09/04や2005/09/07以降2005/09/30までのテーブルには存在 しない日付も抽出したいと思っています。 どのようにすれば抽出できるのでしょうか?
- ベストアンサー
- Oracle
- 重複レコードの取得
すみません。。重複レコードの取得方法に困っています。 やりたいのは以下です。 テーブルA 項目1| 項目2| 項目3| 11 | 11 | 01 | 12 | 11 | 02 | 13 | 11 | 04 | 14 | 11 | 04 | 上記の項目1は主キーです。 抽出したいのは下記のみです。 項目1| 項目2| 項目3| 13 | 11 | 04 | 14 | 11 | 04 | 色々SQLを組んで試しては見てるのですが。。。。 select * from テーブル where ((項目3) in (SELECT 項目3 FROM テーブル GROUP BY 項目3 having count(*)>1)) 上記SQLだと項目3を主キーごとにカウントしてるみたいなので 意図した結果が抽出されないのです・・・・・。 項目2と項目3を結合して重複のチェックをすればよいのか?? とも思いますがSQL自体が1本で完結したいので よく分からなくなってしまいました。。。。。 皆さんご教示宜しくお願い致します。
- 締切済み
- Oracle
- SQLでDATE型のデータを参照するのは?
SQLであるテーブルから日付型のデータを秒単位まで参照したのですが... そうですね、例えば"TABLE01"というテーブルの"Field01"っていう項目から 2000年9月7日の11:45のデータを抽出したい場合は、どような SELECT文を発行すればよろしいのでしょうか? ちなみに自分がやっているのはORACLE7です。
- ベストアンサー
- その他(プログラミング・開発)
- 一日前のデータのみ表示
SQL文についてご教授ください。 あるテーブルのいくつかの列をSELECTする際に、 timestampという列に対して、下記のようにしています。 to_char(timestamp, 'yy-mm-dd hh24:mi:ss') DAY そこで、質問です。 timestamp列が、一日前のデータのみ抽出するには、どのように記述すればよいのでか。 timestamp列は、data型です。 DBはOracle10gです。 OSはWindowsServer2003です。 宜しくお願いいたします。
- ベストアンサー
- Oracle
- データ型について教えてください。
データ型について教えてください。 あまり気にする必要がないかもしれませんが、テーブルにフラグ目的でフィールドを作る場合、 データ型は何するのが一般的なのでしょうか?(CHAR OR NUMBER?) ACCESSで言えばBOOLEANになると思うのですが、ORACLEやポスグレはないですよね? 私は、CHAR(1)にしています。 理由は、プログラムでSQLを書くときに''で囲むようにするためです。 その他のフィールドもだいたいテキストか日付ですので、''を囲むフィールドばかりです。 できるだけ''囲むフィールドに統一して、SQLの記述ミスを少なくしようというのが狙いです。 この考え方は間違っていますか?
- 締切済み
- Oracle
- オラクルのレコードカウントの制御
プログラム初心者です。 オラクル(11g)で、10個のPCで10人が、あるテーブルのデータを更新していく、システムを作成(VB2005)しています。 例として下記のようなデータがあります。 テーブルC 日付順 番号はユニーク 日付_番号_レコードカウント(Rc) 1/3____1_____0 1/5____2_____1 1/6____5_____2 (Rc2) 1/7____7_____3 (Rc3) 1/20__ 9_____4 2/1___10_____5 この全データをSQLで、【【毎回】】読込みます。 A氏が例えば1/6のデータを編集したとします。レコードカウント2(以降Rc2) 【編集したデータは、同テーブルが更新される場合と、他のテーブルに移動するケースがあります。 更新された場合でも、他のテーブルに移動する場合でも、A氏は次に1/7(Rc3)のデータを編集させたいです。】 この場合、更新されたら、レコードカウントを次に移行すればいいのですが(Rc2+1で Rc3)、 1/6のデータを編集後、他のテーブルに移動された場合、Rc3を見ても(SQL再読込後)、1/20のデータが抽出されて しまいます。 なので、このケースは、テーブルが移動された場合、レコードカウントは据え置きで、Rc2をみるという プログラムを作らなくてはいけません・・・・・。 これも問題ですが、さらに大きな問題は、 1/6のデータを編集後、そのデータが移動されたときに、その間にB氏とC氏により、1/3,1/5のデータ更新後移動 されたケースがさらに悩んでいます。 Rc2で据え置きで 1/7のデータを読みに行こうとしたら、1/3,1/5のデータが既になくなっているので、 Rc2をみると、2/1のデータを見ることになってしまいます。 こうした多くの人がデータを編集、移動する場合のテーブルを、日付順に作業させていく場合は、どのような制御 (またはオラクルの機能)をすれば、可能なのかご指導頂ければ助かります。
- 締切済み
- Oracle
- オラクルのレコードカウントの制御(改訂版)
プログラム初心者です。 オラクル(11g)で、10個のPCで10人が、あるテーブルのデータを更新していく、システムを作成(VB2005)しています。 画面は2パターンです。 ・データ一覧表示画面 ・上記からデータを選択し、編集する用の画面 例として下記のようなデータがあります。 テーブルC 日付順 番号はユニーク 日付_番号_ステータス__レコードカウント(Rc) 1/3____1_____Q________0 1/5____2_____R________1 1/6____5_____G________2 (Rc=2) 1/7____7_____P________3 (Rc=3) 1/20__ 9_____R________4 2/1___10_____U________5 動作の流れ 1.まず、この全データをSQLで読込みます。 SELECT * FROM テーブルC ORDER BY 日付 ASC これが一覧表示画面(VB2005のグリッドビュー等)に表示されます。 2.A氏が例えば1/6のレコードを編集したいとします。 そこで、1/6(日付)の列をマウスで選択。このとき列番号(レコードカウント)は2になります。 編集画面フォームに、同じSQL(SELECT * FROM テーブルC ORDER BY 日付 ASC) と、列番号(レコードカウント)2を、引渡しします。 3.編集画面で、引き渡されたSQLを実行し、そのデータを全てDatatblに格納します。 そのデータの3つめ(レコードカウント2)を参照します。 datatabl.Rows(2).Item("ステータス") データは参照後、ある条件によりステータスが変わります。 ステータスが、"Z"になった場合、そのレコードは、テーブルAに移動されます。 4.編集後は、他のテーブルに移動する場合でも、テーブルCがそのまま更新される場合でも、 自動的に次の列のレコードに移行し編集を行う。 今回は例として、1/6のレコードのステータスが"Z"になって A氏は次に1/7(Rc3)のデータを編集作業に入ります。 5. 4.を実行するため、また同じSQLを実行。 SQL実行後、レコードカウントを次に移行すればいいのですが(Rc=2に1を加え、Rc=3とする)、 Rc=3を見ても、1/20のデータが抽出されて しまいます。 (1/6のレコードが移動してなくなってしまった場合) また、他の例として、上記と同様に、A氏が1/6のデータを編集中に、他の人が1/3,1/5のデータを編集移動 してしまった場合、レコードカウントがぐちゃぐちゃになってしまいます。 こうした多くの人がデータを編集、更新・移動する場合のテーブルを、日付順に作業させていく場合は、どのような制御 (またはオラクルの機能)をすれば、可能なのかご指導頂ければ助かります。
- ベストアンサー
- Oracle
お礼
回答ありがとうございました。 おかげさまで解決いたしました。