- PR -

SQL Serverで日付範囲の問題ですが

1
投稿者投稿内容
Chumomo
常連さん
会議室デビュー日: 2005/03/04
投稿数: 33
投稿日時: 2005-08-17 23:33
こんばんは。
C#.NETを使って、SQLServerと連携しソフトウェア開発していますが、或る時間帯の中のデータを取り出すという機能実現したいのです。しかし、今、2005/01から2005/07からのデータを読み出し、2005/8/15のデータもでてきてしまいました。

プログラムとデータベースは、大体の構造が以下の通り:
1.SQLServerにストアドプロシージャを通して@Where、@Orderbyという二つのパラメータを指定する。
2.C#の中にそのプロシージャを使い、@Whereと@Orderbyに値を植入する。
where文は "where CONVERT(INT,LEFT(CONVERT(VARCHAR,date,112),6))>=200501 and
where CONVERT(INT,LEFT(CONVERT(VARCHAR,date,112),6))<=200507"
この文はSQLServerで問題なしです

以上日付に関する問題ですが、どうか御助けてください。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-08-18 00:15
where CONVERT(INT,LEFT(CONVERT(VARCHAR,date,112),6))>=200501 and
where CONVERT(INT,LEFT(CONVERT(VARCHAR,date,112),6))<=200507

これって、whereが2回入っていますがソースのコピペのミスですよね。
ちなみに、ストアド単体ではうまく動いているのでしょうか?
また、[date]の型はどうなっているんでしょうか?

余談ですが、
where LEFT(CONVERT(VARCHAR,date,112),6) between '200501' and '200507'
という様に書いた方がシンプルかつ楽かと思います。

未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-08-18 00:51
本題とは関係ないけど、テーブルの列値を加工するとインデックスが利用できなくなるのでやめたほうがいい。時系列で蓄積されていく大量のトランデータだと致命的。

たとえ入力値が 2005/01 と 2005/07 だったとしても、それを展開して where date between '2005/01/01' and '2005/07/31' となるように工夫しなさい。
1

スキルアップ/キャリアアップ(JOB@IT)