2009-03-11 9 views
1

私はasp.netのcalendarextenderコントロールを使用しています。時刻は表示されず、日付のみ表示されます。ただし、データベースに挿入すると時間が自動的に挿入されます。データベースを検索する際、この問題を解決するためにstoredprocedureの何の変更を行うことができます。カレンダーエクステンダー

私は、テーブルのstoredprocedure.Nameに次のコードを使用するには、FileM

日時すなわち日付iが挿入された日付であるとしてOLDDATEは= '@ OLDDATE%' 現在データベースで

OLDDATEフィールドが店でFileM SELECT * FROMあります時間は08:00:00:000または00:00:00:000のいずれかになります。上記のクエリでは、時刻が00:00:00:000の日付は記録されますが、08:00: :000

答えて

2
-- assumes that the @OldDate parameter is a DATETIME 
SELECT * 
FROM FileM 
WHERE DATEDIFF(day, OldDate, @OldDate) = 0 

ストアドプロシージャを変更できる場合は、そして、パフォーマンス、2つのDATETIMEパラメータを渡す必要範囲の開始時間と終了時間を指定することによって:

EXEC dbo.GetRangeOfRecords 
    @StartDateTime = '2009-02-25 00:00:00.000', 
    @EndDateTime = '2009-02-25 23:59:59.999' 
0

次のコード:例えば、このようなストアドプロシージャを呼び出し、その後

CREATE PROCEDURE dbo.GetRangeOfRecords 
@StartDateTime DATETIME, 
@EndDateTime DATETIME 
AS 
SELECT * 
FROM FileM 
WHERE OldDate BETWEEN @StartDateTime AND @EndDateTime 

とをあなたのdatetime値の時間コンポーネントを取り除きます(ストリップアウトによって私は意味しますそれ午後十二時00分00秒すなわち真夜中): -

DATEADD(D、DATEDIFF(D、0、MyDateTimeColumn)、0)

ので、あなたが使用することができます: -

選択*あなたがそこに、SQL Server 2008をDATEADD(D、DATEDIFF(D、0、OLDDATE)、0)= @OldDate

また、使用している場合FileMからnew date data type(時間コンポーネントなし)です。

+0

範囲を生成するのは、パラメータから時間を取り除き、下限に使用して上限を11:59:59.997にする方がよいでしょう(次の日付の真夜中に.999ラウンドまで) 。そうすれば、インデックスを使うことができます。テーブルのカラム値を変更すると、SQLはインデックスを使用できなくなります –

0

明示的に時刻コンポーネントが指定されていない場合は、すべてデフォルトで00:00:00.000に設定する必要があります。その場合、単純な等価比較はうまくいくでしょう。あなたのコードでは、パラメータの周りに引用符を入れています。つまり、日付を "@ OldDate%"のリテラル文字列と比較しています。引用符を削除し、それが役立つかどうか確認してください。

私はLukeの答えが好きですが、そのオプションがなく、既存のストアドプロシージャーしか修正できない場合は、これが役立つかもしれません。

関連する問題