2017-12-02 6 views
0

datetime変数の値を設定すると、曜日と月が切り替わります。例えばSQL Serverでdatetime変数の値を設定するときのT-SQLの置き換え2017

declare @date datetime = '2017-12-02 14:56:24.000' 
select datepart(month,@date) 

結果は12であるべきであるが、それは2問題はSQLサーバ2017に戻る2016 12

+0

言語または他の接続設定に敏感ではないの形式を使用します - として@ lad2025が示唆している。これをより良く理解するには、[this](http://karaszi.com/the-ultimate-guide-to-thedatetime-datatypes)を参照してください。 – SMor

+1

なぜdatetime2ではなくdatetimeを使用していますか?この問題はありませんか? –

+1

** DATETIMEの使用をやめ、SQL Server ** 2008 **で導入されたDATETIME2(n)のデータ型を使用しなくてはならない**多くの**理由の1つ。そのデータ型は同じ動作を示しません** - datetimeは常に正しく解釈されます。 –

答えて

1

に同じコードが存在する問題の唯一の存在SQL Server 2017で同じコードが返されます。

これはSQL Serverのバージョンに依存しません。の設定:

SET DATEFORMAT ymd; 
declare @date datetime = '2017-12-02 14:56:24.000'; 
select datepart(month,@date); 
-- 12 

SET DATEFORMAT ydm; 
declare @date2 datetime = '2017-12-02 14:56:24.000'; 
select datepart(month,@date2); 
-- 2 

Rextester Demo


これを回避するために、私は文化の独立ISO-8601日付形式を使用することをお勧めします。

declare @date datetime = '2017-12-02T14:56:24.000'; 

Rextester Demo2

またはmarc_sとしてDATETIME2に変更データ型を提案:

DECLARE @date DATETIME2 = '2017-12-02 14:56:24.000'; 

Rextester Demo3

+1

あるいは、DATETIMEの代わりに 'DATETIME2(n)'を使用してください - SQL Server ** 2008 **以降の推奨事項.... –

関連する問題