2009-08-24 9 views
5

の時間部分をSQL Serverに格納しないようにするにはどうすればよいですか?つまり、2011-01-01 00:00:00.000という値がある場合は、2011-01-01のみ保存しますか?SQL Server 2005でのみ日付を格納する

日付部分のみが保存されていることを確認します。

答えて

7

DateTimeデータ型は、常に日付と時刻を格納します。したがって、CONVERT/CASTを使用して特定の形式を取得するか、YEAR()、MONTH()またはDAY()メソッドを使用して、必要に応じて日付の詳細を切り分けます。

+0

または、列の時間部分を無視してデフォルトにすることができます。値を挿入/更新するときにのみ、日付を入力するようにしてください。 –

2

最も簡単な解決策は、時間部分をユーザーに公開しないことです。ただし、実際に日付部分だけが格納されていることを確認する必要がある場合は、値を格納する前に、時間部分を真夜中/正午/一定の時間に強制することができます。

1

組み込みのDATETIMEデータ型は、日付と時刻の両方のデータを格納します。日付部分のみを指定した場合、時刻は12:00:00かそのようなものになります。

面白い話:日付と時刻フィールドがある場所で、日付と時刻が両方とも格納されていたデータベースが1回見えましたが、データの半分だけが使用されていました。何人かの人はばかげたことをします:)

1

DateTimeをIntにキャストして戻すと、時刻部分として00:00のDateTimeが返されます。 データベースにすべての日付を整数として保存することができます。

+0

'DateTime'を' INTEGER'にキャストすると、 'DateTime'を最も近い深夜に丸めます。最初に 'FLOAT'にキャストしてから' INTEGER'にキャストする必要があります。 – Quassnoi

+0

あなたはそうです。私は正午までにこれを試してみたに違いありません。 – idstam

1

どちらの計算列を追加:誰かが挿入しようとするとエラーを発生させるためにあなたのdateonly列にCHECKを作り、

INSERT 
INTO  mytable (dateonly) 
VALUES CONVERT(DATETIME, CONVERT(CHAR(8), GETDATE(), 112), 112) 

dateonly AS CONVERT(DATETIME, CONVERT(CHAR(8), date_with_time, 112), 112) 

または右挿入時にあなたの日付を切り捨てを非切り捨て値:

CHECK (dateonly = CONVERT(DATETIME, CONVERT(CHAR(8), date_with_time, 112), 112)) 
0

日付をyyyMMdd整数値。

関連する問題