シナリオ: ストアド プロシージャは、datetime パラメーターとして DateTime.Now 値などを含む DateTime をコードから受け取ります。ストアド プロシージャは、行の datetime の日付部分のみを格納する必要がありますが、時間間隔での検索や日付に基づくレポートの作成などのために、日付に関連するすべての演算を保持します。
いくつかの方法があることは知っていますが、パフォーマンスと無駄なスペースを考慮して、どの方法が良いでしょうか?
ビジネスロジックは、プロシージャの外部で処理する必要があります。procsジョブは、渡されたデータを保存することです。要件が時刻ではなく日付のみを格納することである場合、BL /DLはDateTime.Now**。Date**(または同等の...基本的にはDateTimeオブジェクトのDate部分)を渡す必要があります。
何らかの理由でコードを制御できない場合は、常にconvert(varchar(10)、@ YOURDATETIME、101)があります。
時間=真夜中の日付を保存します
編集:私はMSSQLServerを想定していました
基本的に、DateTimeオブジェクトのDate部分のみを格納します。つまり、データのクエリをどのように処理するかに関係なく、返される日付は常に00:00:00に設定されます。
データベースがこの情報をドロップするため、このシナリオでは(元のDateTimeオブジェクトがそれらを使用していても)時間関連の関数は役に立ちません。
データベースから返される各日付の午前0時を想定する必要がありますが、日付関連の計算は引き続き適用されます。
SQL Server 2008 には、時刻を格納しない日付のみの型 (DATE) があります。アップグレードを検討してください。
http://www.sqlteam.com/article/using-the-date-data-type-in-sql-server-2008
Oracle で作業している場合は、ストアド プロシージャ内で日時に TRUNC 関数を使用します。これは日付部分のみを返します。