Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server getdate()是否返回奇怪的结果?_Sql_Sql Server - Fatal编程技术网

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 a
datetime
,则它将保持
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 a
datetime
,则它将保持
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。