2016-05-16 39 views
0

なぜこの2つのnvarcharとDateTimeの結果が異なるのですか?nvarcharをDateTimeに変換すると、異なる日付が返されます

Declare @ApplyDate nvarchar(max) 
Set @ApplyDate = N'2014-01-01' 

Print CONVERT(datetime, @ApplyDate , 120) 
Exec(' print CONVERT(datetime, ' + @ApplyDate + ', 120) ') 

結果は次のとおりです。

Jan 1 2014 12:00AM 
Jul 6 1905 12:00AM 
+1

はじめに、なぜ日付をvarcharとして保存していますか? –

+0

@RichBenner私はなぜこれが違うのかを知りたいだけではありませんか? – Behnam

答えて

4

:もちろん同等です

print CONVERT(datetime, 2014-01-01, 120) 

Exec(' print CONVERT(datetime, ' + @ApplyDate + ', 120) ') 

あなたが効果的に変身引用符なし@ApplyDateを、挿入されています

print CONVERT(datetime, 2012, 120) 

ここで、2012は1900-01-01からの経過日数として読み込まれます。あなたはおそらく、(引用符をメモ追加のペア)を探している

Exec(' print CONVERT(datetime, ''' + @ApplyDate + ''', 120) ') 
1

あなたはあなたの第二の例では、文字列値の周りの余分な単一引用符を逃したので、それは文字列として認識されません。

これは、両方の実施例は、同じ日付を出力する。この場合

Exec(' print CONVERT(datetime, ''' + @ApplyDate + ''', 120) ') 

であるべきです。あなたのEXEC声明の中で

1

、あなたは@ApplyDateの前後に引用符が欠落していると、それは数値計算と解析されています:

2014 - 01 - 01 = 2012 

日付に変換したときに正しくJul 6 1905 12:00AMです。

試してみてください。このクエリで

Exec(' print CONVERT(datetime, ''' + @ApplyDate + ''', 120) ') 
0

あなたがこれまでに2014年マイナス1マイナス1の結果を変換する第二では

が見

Declare @ApplyDate nvarchar(max), 
    @str nvarchar(max) 

Set @ApplyDate = N'2014-01-01' 

Print CONVERT(datetime, @ApplyDate , 120) 
Exec(' print CONVERT(datetime, ' + @ApplyDate + ', 120) ') 

select @str = ' print CONVERT(datetime, ' + @ApplyDate + ', 120) ' 

print @str 
関連する問題