SQL Server getdate()是否返回奇怪的结果?
所以我有一个小问题:SQL Server getdate()是否返回奇怪的结果?,sql,sql-server,Sql,Sql Server,所以我有一个小问题: GO declare @datetime varchar(25); select @datetime = getdate(); select cast(convert(varchar(8), @datetime, 112) as varchar) GO 返回的是:4月12日 然而,这: GO declare @datetime varchar(25); select @datetime = getdate(); select cast(convert(varchar(8)
GO
declare @datetime varchar(25);
select @datetime = getdate();
select cast(convert(varchar(8), @datetime, 112) as varchar)
GO
返回的是:4月12日
然而,这:
GO
declare @datetime varchar(25);
select @datetime = getdate();
select cast(convert(varchar(8), getdate(), 112) as varchar)
GO
返回:20140401
(这正是我们想要的),那么为什么宣言会把事情搞砸呢?我如何得到第二次返回的结果?(顺便说一句,这在触发器内,但这是混乱的部分)尝试第一个更改:
GO
declare @datetime DATETIME;
select @datetime = getdate();
select cast(convert(varchar(8), @datetime, 112) as varchar)
GO
该问题是由于varchar数据类型和您通过将结果从
GETDATE()
选择到varchar中而使用的不正确强制转换造成的。请尝试第一个进行以下更改:
GO
declare @datetime DATETIME;
select @datetime = getdate();
select cast(convert(varchar(8), @datetime, 112) as varchar)
GO
该问题是由于varchar数据类型以及通过将结果从
GETDATE()
选择到varchar中而使用的不正确强制转换造成的。您需要将@datetime的数据类型更改为datetime
declare @datetime DATETIME;
select @datetime = getdate();
select cast(convert(varchar(8), @datetime, 112) as varchar)
从
varchar到datatime的隐式转换发生在select@datetime=getdate()代码>并导致wierd行为您需要将@datetime的数据类型更改为datetime
declare @datetime DATETIME;
select @datetime = getdate();
select cast(convert(varchar(8), @datetime, 112) as varchar)
从varchar到datatime的隐式转换发生在select@datetime=getdate()代码>并导致此行上的wierd行为隐式转换:
select @datetime = getdate();
为什么不将@datetime声明为datetime类型?这一行的隐式转换:
select @datetime = getdate();
为什么不将@datetime声明为datetime类型?在这种情况下:
declare @datetime varchar(25);
select @datetime = getdate();
select cast(convert(varchar(8), @datetime, 112) as varchar)
@datetime
是一个VARCHAR
值,其中包含“2014年4月1日…”
。当您将其转换为VARCHAR(8)
时,只会将其截断为8个字符-忽略“style”参数
如果您声明@datetime
ad adatetime
,则它将保持datetime
值,并且CONVERT
将使用您指定的格式将其转换为字符串。在这种情况下:
declare @datetime varchar(25);
select @datetime = getdate();
select cast(convert(varchar(8), @datetime, 112) as varchar)
GO
declare @datetime SMALLDATETIME;
select @datetime = getdate();
select cast(convert(varchar(8), @datetime, 112) as varchar)
GO
@datetime
是一个VARCHAR
值,其中包含“2014年4月1日…”
。当您将其转换为VARCHAR(8)
时,只会将其截断为8个字符-忽略“style”参数
如果您声明@datetime
ad adatetime
,则它将保持datetime
值,并且CONVERT
将使用您指定的格式将其转换为字符串
GO
declare @datetime SMALLDATETIME;
select @datetime = getdate();
select cast(convert(varchar(8), @datetime, 112) as varchar)
GO
为什么要将其存储为varchar?把它当作约会时间,直到你不得不把它赶出去
上面的代码返回正确
为什么要将其存储为varchar?把它当作约会时间,直到你不得不把它赶出去
上述代码返回正确。您已将其分配给varchar变量。你也可以直接使用它
select cast(convert(varchar(8), getdate(), 112) as varchar)
您已将其分配给varchar变量。你也可以直接使用它
select cast(convert(varchar(8), getdate(), 112) as varchar)
你赢了我+1有时你知道答案,但你看不见:)你比我快+1有时您知道解决方案,但看不到:)作为旁白,您为什么要在不声明长度的情况下强制转换为varchar。顺便说一句,为什么您要在不声明长度的情况下强制转换为varchar。