Sql 为什么convert(datetime,getdate(),101)在存储过程和简单的select命令中执行时会产生不同的结果?

Sql 为什么convert(datetime,getdate(),101)在存储过程和简单的select命令中执行时会产生不同的结果?,sql,stored-procedures,Sql,Stored Procedures,不知道为什么,但在运行命令时 select CONVERT(datetime, getdate(),101) 获取所需结果的'2016-10-27 15:53:12.743' 但是,如果在存储过程中运行相同的命令,如 if @CodeFilter2 is not null select @CodeFilter2=CONVERT(datetime,GETDATE(),101) 收益率“2016年10月27日下午3:55” 请帮助我理解为什么会发生这种情况 提前谢谢 您正在将datetime转换

不知道为什么,但在运行命令时

select CONVERT(datetime, getdate(),101)
获取所需结果的
'2016-10-27 15:53:12.743'

但是,如果在存储过程中运行相同的命令,如

if @CodeFilter2 is not null
select @CodeFilter2=CONVERT(datetime,GETDATE(),101)
收益率
“2016年10月27日下午3:55”

请帮助我理解为什么会发生这种情况


提前谢谢

您正在将
datetime
转换为
datetime
?您是否希望
convert
中使用的格式保持不变?它只是被忽略了,因为它对您正在进行的转换没有任何意义。如果您想将datetime转换为varchar,您需要使用类似于
convert(varchar(max),getDate(),101)
,这将为您提供正确的输出
10/27/2016
-我不知道为什么您希望您的两个示例都是正确的;它们恰好是这样工作的,因为默认转换(基于区域设置和其他上下文,这是非常可变的)恰好是您想要的结果(在第一种情况下)


如果需要依赖特定格式,则必须使用显式格式。或者让应用程序来处理它,而不是DB服务器。ODBC cannonical表单的正确格式(似乎是您想要的格式)是121。确保您正在转换为
varchar
nvarchar
,而不是
datetime

您使用的是哪种dbms?(该代码与ANSI SQL相去甚远。)如何传递此参数
@CodeFilter2
您看到的不是实际值,而是日期时间值的字符串表示形式,使用的格式与上下文、设置、系统区域性和服务器语言绑定。这就是为什么人们应该总是避免任何特定于区域性的日期时间格式或任何基于字符串的日期时间存储…我发现了为什么会发生这种情况,参数“@CodeFilter2”的数据类型被定义为nvarchar,应该是datetime。这解决了问题。谢谢我发现了为什么会发生这种情况,参数“@CodeFilter2”的数据类型被定义为nvarchar,它应该是datetime。这解决了问题。谢谢