Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
Tsql T-sql中的Datediff函数_Tsql - Fatal编程技术网

Tsql T-sql中的Datediff函数

Tsql T-sql中的Datediff函数,tsql,Tsql,以下调用的输出是什么: DATEDIFF(wk,14,GET DATE()) 14表示日期还是表示相差两周 从这里开始 因此14应指明开始日期。检查,因为只添加14没有意义,它应该是一个日期,例如 SELECT DATEDIFF(week, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000'); 正如svkaka在回答中所写的那样,DATEDIFF函数需要一个datepart、开始日期和结束日期,但是,您的代码为它提供了

以下调用的输出是什么:

 DATEDIFF(wk,14,GET DATE())
14
表示日期还是表示相差两周

从这里开始

因此14应指明开始日期。检查,因为只添加14没有意义,它应该是一个日期,例如

SELECT DATEDIFF(week, '2005-12-31 23:59:59.9999999', '2006-01-01 00:00:00.0000000');

正如svkaka在回答中所写的那样,
DATEDIFF
函数需要一个datepart、开始日期和结束日期,但是,您的代码为它提供了一个
int
作为第二个参数。
在这种情况下,SQL Server会隐式地将
int
转换为
DateTime
,因此

SELECT DATEDIFF(wk, 14, GetDate())
事实上

SELECT DATEDIFF(wk, '1900-01-15', GetDate())
因为铸造14到DateTime将产生该日期。
但是,请注意,其他日期/时间数据类型都不能直接从int转换

这是旧版本SQL Server中用于截断部分日期时间值的技术的基础。
例如,如果要在2005版本中截断时间部分,可以执行以下操作:

SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) -- 0 meaning January 1st 1900
(在2008年,你只需选择日期)


但是,在较新版本的SQL Server中(事实上,自2012年引入了
datefromparts
及其同级函数以来),不再需要这种技术。

DATEDIFF
要求将两个日期作为AFAIK的第二和第三个参数。因此,您编写的内容没有多大意义,即使它将运行.DATEDIFF(wk,14,GETDATE())这14是什么意思?您是否出于某种原因无法访问MSDN?
SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) -- 0 meaning January 1st 1900