- - PR -
SQLの抽出条件について
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-07-19 21:50
お世話になっております。
SQL文の書き方についてわからないことがあり 投稿させて頂きました。 (例) sqldata = "SELECT 登録日時 FROM TBL_ウェハ使用履歴 WHERE ウェハロットNo = '" & Me.ComboWaferLot.Text & "' " 上記、SQL文にもう一つ抽出条件として その日の週(月〜日)という条件を加えたいのですが どの関数、どういう書き方をすればよいのか 悩んでいます。 ネットや本などで調べたのですが、 厳しい状況でして。 どなたか教えて頂けないでしょうか。 どうぞ宜しくお願い致します。 | ||||||||||||||||
|
投稿日時: 2006-07-19 22:43
厳しい状況でして と 安易に言うな と言いたいが。。。
理由:この程度 ネット検索で調べりゃすぐわかるだろうに。。。 実際 Oracle 日付 関数 SQL 曜日 の5つのキーワードでGoogleで3番目に出てきたぞ。 SELECT ROUND(NEXT_DAY(sysdate,'日曜日'),'DAY')-6 as 今週月曜日 , ROUND(NEXT_DAY(sysdate,'日曜日'),'DAY') as 次週日曜日 FROM DUAL =========== 訂正加筆 =========== なぜか勝手に、Oracleと決め付けてしまっていた。 この点は申し訳ない。 とはいえ、元の質問において、DB系の質問なのに DBMSが何か書いていないんだな・・・・・・。 [ メッセージ編集済み 編集者: platini 編集日時 2006-07-19 23:21 ] | ||||||||||||||||
|
投稿日時: 2006-07-19 22:59
もう一つは 呼び出し側で週の初めの日と終わりの日を計算して
その値を範囲指定するやり方もある where 日>='04/05/01' and 日<='04/05/05' | ||||||||||||||||
|
投稿日時: 2006-07-20 01:27
同じ週ということで年における週番号が一致するデータを取得すればいいのではないでしょうか?
登録日時(?)の週番号とその日(システム日付?)の週番号が一致するものって条件を書いてあげたらいいかと思います。 Oracleの場合
SQL Serverの場合
PostgreSQLの場合 (日曜を週頭と考える場合)
MySQLの場合 (日曜日を週の最初とした場合)
_________________ 夏椰 @ わんくま同盟 夏椰の庵 Microsoft MVP for Windows Server System - SQL Server ( Jul 2006 - Jun 2008 ) | ||||||||||||||||
|
投稿日時: 2006-07-20 21:02
夏椰さんこんにちは。
SQL Server 2000で試した限りですが(←追記) この方法では年を正しく処理できません。 例えば下記の様なケースです。 1.年末年始にまたがった週の時 -> 年末と年始では別の週として扱われる。 2.昨年などの過去の日付も存在する時 -> 年が違っても同じ週として扱われる。 platiniさんの例の様に、週初日となる月曜の日付を使用する方法が適当と思います。 SQL Server 2000、SET DATEFIRSTを使用しない時に、その週の月曜日(週初日)を求める場合。
または
[ メッセージ編集済み 編集者: マー帽 編集日時 2006-07-20 21:08 ] [ メッセージ編集済み 編集者: マー帽 編集日時 2006-07-20 21:10 ] [ メッセージ編集済み 編集者: マー帽 編集日時 2006-07-20 23:26 ] | ||||||||||||||||
|
投稿日時: 2006-07-20 21:42
Wafer Slice 数量 登録日時
AA 1 400 2006/7/12 AA 2 400 2006/7/13 AA 3 400 2006/7/14 AA 4 400 2006/7/17 AA 5 400 2006/7/18 AA 6 500 2006/7/19 AA 7 500 2006/7/20 AA 8 500 2006/7/21 AA 9 500 2006/7/22 AA 10 500 2006/7/23 上記、例のデータから23日(日)に抽出処理を行うとしたらその週の月曜日から日曜日のデータを抽出できるようにしたいのです。ということは7/17〜23のデータ。 sqldata = "SELECT 登録日時 FROM TBL_ウェハ使用履歴 WHERE ウェハロットNo = '" & Me.ComboWaferLot.Text & "' " & _ AND 今週の月曜日から今週の日曜日" というの自分のやりかったことでして、 ”今週の月曜日から今週の日曜日”の書き方わからず困っていました。 マー帽様 sqldata = "SELECT 登録日時 FROM TBL_ウェハ使用履歴 WHERE ウェハロットNo = '" & Me.ComboWaferLot.Text & "' " & _ AND DATEADD(day, - ((DATEPART(weekday, 登録日時) + 5) % 7), CONVERT(varchar, 登録日時, 111))" の処理方法でいんでしょうか? 今は社外なので確認することができないのですが。。 | ||||||||||||||||
|
投稿日時: 2006-07-20 22:10
JTさん、こんばんは。
登録日時に時刻の情報が含まれているかどうかによりますが、 下記の様に記述すれば、一応実現すると思います。 登録日時に時刻が含まれている時(月曜以上、翌週月曜未満)
登録日時に時刻が含まれていない時(月曜から日曜まで)
ですが、もし私が同じ事をするのであれば、 月曜と日曜の日付をプログラムで求めて七味唐辛子さんの案で検索します。 上記の方法がスマートだとは思えませんので・・・ | ||||||||||||||||
|
投稿日時: 2006-07-20 22:59
登録日時に時刻の情報が含まれているかどうかによりますが、
下記の様に記述すれば、一応実現すると思います。 時刻は含まれています。 登録日時に時刻が含まれている時(月曜以上、翌週月曜未満)
上記の方法で処理をしてみました。 sqldata = "SELECT 登録日時 FROM AXIS.DK_TBL_ウェハ使用履歴 WHERE ウェハロットNo = '" & Me.ComboWaferLot.Text & "' " & _ "AND 登録日時 >= DATEADD(day, - ((DATEPART(weekday, GETDATE()) + 5) % 7), CONVERT(varchar, GETDATE(), 111)) " & _ "AND 登録日時 < DATEADD(day, 7 - ((DATEPART(weekday, GETDATE()) + 5) % 7), CONVERT(varchar, GETDATE(), 111))" SQL実行時にエラーが出てしまいました。 ORA-00911:文字が無効です。 すみません、まだまだ未熟なものですがご指摘をお願いします。 |