Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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/21.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/9/three.js/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
Sql 包含十进制值的2个时间戳的datediff()_Sql_Sql Server_Datediff - Fatal编程技术网

Sql 包含十进制值的2个时间戳的datediff()

Sql 包含十进制值的2个时间戳的datediff(),sql,sql-server,datediff,Sql,Sql Server,Datediff,这一问题我已经讨论了好几天了,似乎不明白为什么当我在列中插入的getdate()为军用时间格式提供了毫秒小数时,我仍然无法提取十进制格式的datediff()结果。这是否与引擎由于周围的“”字符而无法识别十进制有关 当我使用: select datediff(s,'2013-06-01 21:59:59.141','2013-06-01 23:59:59.997') select cast(datediff(s,'2013-06-01 21:59:59.141','2013-06-01 23:

这一问题我已经讨论了好几天了,似乎不明白为什么当我在列中插入的getdate()为军用时间格式提供了毫秒小数时,我仍然无法提取十进制格式的datediff()结果。这是否与引擎由于周围的“”字符而无法识别十进制有关

当我使用:

select datediff(s,'2013-06-01 21:59:59.141','2013-06-01 23:59:59.997')
select cast(datediff(s,'2013-06-01 21:59:59.141','2013-06-01 23:59:59.997') as float);
它返回:

7200
7200
当我使用:

select datediff(s,'2013-06-01 21:59:59.141','2013-06-01 23:59:59.997')
select cast(datediff(s,'2013-06-01 21:59:59.141','2013-06-01 23:59:59.997') as float);
它返回:

7200
7200
为了得到一个十进制值,我不知道我缺少了什么


谢谢

如果您试图获取差异的毫秒数,并且希望将单位转换为秒,您可以尝试使用以下方法:

SELECT DATEDIFF(MS,'2013-06-01 21:59:59.141','2013-06-01 23:59:59.997') / 1000.0

这将产生:
7200.856000

如果您试图获取差异的毫秒数,并且希望将单位转换为秒,您可以尝试使用以下方法:

SELECT DATEDIFF(MS,'2013-06-01 21:59:59.141','2013-06-01 23:59:59.997') / 1000.0
这将产生:
7200.856000

请注意,DATEDIFF(MS,…)需要长时间的保护,否则会产生溢出:

SELECT datediff(MS, '2013-06-30 23:59:59.997', '2013-06-01 21:59:59.141')
-- FAILURE: The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large
您可以使用以下方法,该方法是溢出安全的,并提供浮点结果:

SELECT cast(cast('2013-06-01 23:59:59.997' as datetime)-cast('2013-06-01 21:59:59.141' as datetime) as float) * 24.0
-- Returned 2.00023796296296

SELECT cast(cast('2013-06-30 23:59:59.997' as datetime)-cast('2013-06-01 21:59:59.141' as datetime) as float) * 24.0
-- Returned 698.000237962963
我不确定当时区在测量的日期期间发生变化时,该方法如何工作。

请注意,DATEDIFF(MS,…)需要长时间的保护,否则会导致溢出:

SELECT datediff(MS, '2013-06-30 23:59:59.997', '2013-06-01 21:59:59.141')
-- FAILURE: The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large
您可以使用以下方法,该方法是溢出安全的,并提供浮点结果:

SELECT cast(cast('2013-06-01 23:59:59.997' as datetime)-cast('2013-06-01 21:59:59.141' as datetime) as float) * 24.0
-- Returned 2.00023796296296

SELECT cast(cast('2013-06-30 23:59:59.997' as datetime)-cast('2013-06-01 21:59:59.141' as datetime) as float) * 24.0
-- Returned 698.000237962963

当时区在测量的日期期间发生变化时,我不确定该方法是如何工作的。

datediff的返回类型是
int
。即使您
cast
将其转换为
float
也会得到相同的结果。
datediff
的返回类型是
int
。即使您
cast
将其转换为
float
也会得到相同的结果。这种规模的计算会影响大量数据的性能吗?我没有提到的是,我的最终结果将是小时,四舍五入到4位数字,我担心在拉取报告时,如果在大型数据集上实现这种语法,性能会如何。选择圆形(铸造(‘2013-06-01 21:59:59.141’、‘2013-06-01 23:59:59.997’)/1000.00)/3600浮点数),4);谢谢,这是有效的,现在上面的内容将为我返回2.0002小时。我只是不知道这是否是实现性能优化的最佳途径。此外,如果我不将其转换为float,它将返回2.000200000000。该规模的计算会影响大量数据的性能吗?我没有提到的是,我的最终结果将是小时,四舍五入到4位数字,我担心在拉取报告时,如果在大型数据集上实现这种语法,性能会如何。选择圆形(铸造(‘2013-06-01 21:59:59.141’、‘2013-06-01 23:59:59.997’)/1000.00)/3600浮点数),4);谢谢,这是有效的,现在上面的内容将为我返回2.0002小时。我只是不知道这是否是实现性能优化的最佳途径。另外,如果我不将其转换为float,它将返回2.000200000000。很好的调用,我也将探索这一点。谢谢我最终不需要强制转换为datetime,因为它已经在datetime数据类型中:选择从Punchs中经过的round(强制转换(punch_out-punch_in as float)*24,4);打卡和打卡已经是约会时间了,所以这一切都很好,谢谢!打得好,我也会探讨一下。谢谢我最终不需要强制转换为datetime,因为它已经在datetime数据类型中:选择从Punchs中经过的round(强制转换(punch_out-punch_in as float)*24,4);打卡和打卡已经是约会时间了,所以这一切都很好,谢谢!