2009-06-10 12 views
1

でカラムから現在の日付部分のエントリを取得する方法。ただし、タスクは日付に関係なくすべてのエントリを照会します。タスクの実行時に、以下に示すように、それはすべての日付のエントリを出力しますデータ型(TSQL)として日時私は毎日データ型として日時を持つ列の名前AttemptDateを含む表を照会し、タスクをスケジュールした

2009-06-06 06:01:30.852 
2009-06-07 01:41:46.719 
2009-06-08 03:58:23.945 

SQLクエリを以下に示します。

SELECT AttemptDate from dbo.ChangeAttempt 

表dbo.ChangeAttemptには、以下の構造を有する:

Column   Data Type  Constraints   
------   ---------  ----------- 

EventData  xml    NOT NULL 
AttemptDate  datetime  NOT NULL DEFAULT GETDATE() 
DBUser   char(50)  NOT NULL 

私の質問は:私の既存のTSQLクエリから、私はwhere句を追加した場合、私は、現在の日付部分のエントリを得るのですか?私はここに現在の日付によって何を意味

は、TSQLクエリを実行するようにスケジュールされた日です。

ADDITION:あなたは制約によってでデフォルト設定されたエントリを得るのですか尋ねている場合

私は反対TSQLクエリを実行していますSQL Serverのバージョンは、2005年

答えて

3
SELECT AttemptDate 
FROM dbo.ChangeAttempt 
WHERE AttemptDate >= cast(floor(cast(getdate() as float)) as datetime) 
+0

どうもありがとうございました。できます。 – titanium

+2

最も簡単な方法は、私がしましたhttp://stackoverflow.com/questions/133081/most-efficient-way-in-ms-sql-to-get-date-from-datetime/150722#150722 DateDiff関数/ DATEADD方法であり、 DateDiff関数は1、それは日付要素のための境界を越えるたびに追加する必要がありますイツァーク – gbn

1
SELECT AttemptDate 
FROM dbo.ChangeAttempt 
WHERE DATEDIFF(d, AttemptDate, GetDate()) = 0 
+0

により、SQL Serverの雑誌で見た同様のテストは、私はそれがDATEDIFFは違い – tekBlues

+0

を丸め12:00 PMの前にのみ機能します怖いです。 –

+0

ニースですが、確信は> = 0にする必要があります。また、テーブルの列に関数を適用すると、インデックスが使用されないため、多くの行でこれが遅くなります。 – gbn

0

ですテーブルがどのように設定されているかはわかりません。あなたがattemptdateを省略した場合、サーバーは、現在の日付と、後で言うことその不可能を使用するためにそれをデフォルトになります..あなたがテーブル構造を変更することができれば、あなたはいくつかの種類の旗とトリガー

を使用することによって、これを容易にすることができます
0

私はあなたが最初の変数には、現在のデータベースの日時を保存する場合は、あなたのクエリがパフォーマンスが向上すると思います:

DECLARE @curr_date datetime; 
SET @curr_date = cast(floor(cast(getdate() as float)) as datetime) 
SELECT AttemptDate 
FROM dbo.ChangeAttempt 
WHERE AttemptDate >= @curr_date 
関連する問題