所以我有一个小问题:
GO
declare @datetime varchar(25);
select @datetime = getdate();
select cast(convert(varchar(8), @datetime, 112) as varchar)
GO
返回此:4月1日2
但是这个:
GO
declare @datetime varchar(25);
select @datetime = getdate();
select cast(convert(varchar(8), getdate(), 112) as varchar)
GO
返回:20140401
(这就是我们想要的),那么为什么要宣布搞乱呢?以及如何获得第二次返回的结果? (这是在Trigger btw中,但这是混乱的部分)
答案 0 :(得分:5)
尝试使用此更改的第一个:
GO
declare @datetime DATETIME;
select @datetime = getdate();
select cast(convert(varchar(8), @datetime, 112) as varchar)
GO
问题是由varchar数据类型和您使用的错误强制转换产生的,方法是将GETDATE()
的结果选择到varchar中。
答案 1 :(得分:2)
您需要将@datetime的数据类型更改为DATETIME
declare @datetime DATETIME;
select @datetime = getdate();
select cast(convert(varchar(8), @datetime, 112) as varchar)
来自varchar to datatime
的隐式转换发生在select @datetime = getdate();
,导致了奇怪的行为
答案 2 :(得分:1)
在这种情况下:
declare @datetime varchar(25);
select @datetime = getdate();
select cast(convert(varchar(8), @datetime, 112) as varchar)
@datetime
是VARCHAR
值,其中包含"Apr 1 2014 ...."
。当你CONVERT
到VARCHAR(8)
时,所有发生的事情都被截断为8个字符 - "样式"参数被忽略。
如果您将@datetime
广告声明为DATETIME
,那么它将保持DATETIME
值,而CONVERT
会使用您指定的格式将其转换为字符串。
答案 3 :(得分:0)
此行的隐式转换:
select @datetime = getdate();
为什么不将@datetime声明为datetime类型?
答案 4 :(得分:0)
GO
declare @datetime SMALLDATETIME;
select @datetime = getdate();
select cast(convert(varchar(8), @datetime, 112) as varchar)
GO
为什么要将它存储为varchar?将它保留为日期时间,直到你必须将它抛出。
以上代码正确返回。
答案 5 :(得分:0)
您已将其分配给varchar变量。您也可以直接使用
select cast(convert(varchar(8), getdate(), 112) as varchar)