将nvarchar转换为DateTime将返回不同的日期
问题描述:
为什么这两个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
答
在此查询:
Exec(' print CONVERT(datetime, ' + @ApplyDate + ', 120) ')
要插入@ApplyDate
没有引号,从而可以有效地为:
print CONVERT(datetime, 2014-01-01, 120)
这当然是相当于到:
print CONVERT(datetime, 2012, 120)
其中,2012年为从1900-01-01开始的天数。
您可能正在寻找(注额外对引号):
Exec(' print CONVERT(datetime, ''' + @ApplyDate + ''', 120) ')
答
你已经错过了你的第二个例子左右字符串值额外的单引号,所以它不会识别为字符串。
它应该是
Exec(' print CONVERT(datetime, ''' + @ApplyDate + ''', 120) ')
在这种情况下这两个实施例的输出相同的日期。
答
在你EXEC
声明,你缺少周围@ApplyDate
引号和它被解析为一个数值计算:
2014 - 01 - 01 = 2012
,当转换成一个日期是正确Jul 6 1905 12:00AM
。
尝试:
Exec(' print CONVERT(datetime, ''' + @ApplyDate + ''', 120) ')
答
在你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
首先,为什么要将日期存储为varchar? –
@RichBenner我不只是想知道为什么我们有这种不同? – Behnam