2017-10-09 14 views
0

今日、SQL Server 2008インスタンスに対してselect GetDate()(2017年10月9日)を実行すると、関数は10/10/2017すなわち明日の日付を返します。 select convert(date, getDate())9/10/2017を返します。なぜか分からない。なぜGetDate()は明日の日付を返しますか?

おそらく関連:Microsoftのドキュメント

は、データベースのタイムゾーンオフセットなしdatetime値 として、現在のデータベース・システムのタイムスタンプを返しますと言います。この値は、SQL Server のインスタンスが実行されているコンピュータのオペレーティングシステムの から取得されます。

正確にはwithout the database time zone offsetとは何ですか?私のSQL Serverは現在GMT + 11です。

+1

これが正しく鳴りません。どのようにこのクエリを実行していますか? SSMSで再現できますか? –

+0

は解が解決された場合にそれを共有します。 – KumarHarsh

答えて

0

.. CURRENT_TIMESTAMPが

敬具

フル役立つ可能性があります使用してみてくださいは、システムの日付と時刻については

SELECT CURRENT_TIMESTAMP; 

OR

SELECT SYSDATETIME(); 

を使用してみてください。

また、使用してUTCとローカルタイムを取得:

SELECT GETUTCDATE() As UTCDateTime 

そして

SELECT CONVERT(DATETIME, SWITCHOFFSET(CONVERT(DATETIMEOFFSET, GETUTCDATE()), DATENAME(TzOffset, SYSDATETIMEOFFSET()))) AS LocalDateTime 
+0

最後のものはむしろ嫌なものです... –

+0

私は、クラウドホストデータベースのUTC保存時間を現地時間に変換するのに最後のものを使用します。お勧めします。 – ViKiNG

+1

あなたが書いたのは基本的に 'SYSDATETIMEOFFSET()'です。しかし、内部の 'GETUTCDATE()'の代わりにデータベースフィールドを使うとしたら、現在のオフセットが値の時のものと同じであると間違って仮定していますフィールド。正しく変換するには、 'AT TIME ZONE'(SQL 2016+)か古いSQLのために私の[SQL Server Time Zone Support](https://github.com/mj1856/SqlServerTimeZoneSupport)プロジェクトを使用する必要があります。 –

関連する問題