Kev*_* Xu 10 sql-server datetime2 intervals
嗨,我正在尝试计算两列datetime2类型之间的差异.
但是SQL Server(2012)似乎不喜欢以下内容:
select cast ('2001-01-05 12:35:15.56786' as datetime2)
- cast ('2001-01-01 23:45:21.12347' as datetime2);
Msg 8117, Level 16, State 1, Line 2
Operand data type datetime2 is invalid for subtract operator.
Run Code Online (Sandbox Code Playgroud)
现在,如果我将其转换为日期时间类型,它会起作用:
select cast (cast ('2001-01-05 12:35:15.56786' as datetime2) as datetime)
- cast (cast ('2001-01-01 23:45:21.12348' as datetime2) as datetime);
1900-01-04 12:49:54.443
Run Code Online (Sandbox Code Playgroud)
但是,当我将它转换为datetime时,我正在失去精度(请注意上面的3位小数精度).在这种情况下,我实际上需要全部5个小数点.有没有办法获得两个datetime2列之间的间隔,仍然保持5个小数点的精度?谢谢.
Mit*_*eat 16
你可以简单地使用DateDiff
返回指定的startdate和enddate之间交叉的指定datepart边界的计数(有符号整数).
select DATEDIFF(MILLISECOND, cast('20010101 23:45:21.12347' as datetime2),
cast('20010105 12:35:15.56786' as datetime2))
Run Code Online (Sandbox Code Playgroud)
不幸的是,尝试获得所需的精度:
select DATEDIFF(MICROSECOND, cast('20010101 23:45:21.12347' as datetime2),
cast('20010105 12:35:15.56786' as datetime2))
Run Code Online (Sandbox Code Playgroud)
导致溢出错误:
The datediff function resulted in an overflow.
The number of dateparts separating two date/time instances is too large.
Try to use datediff with a less precise datepart.
Run Code Online (Sandbox Code Playgroud)
实现所需精度的一种方法是迭代地分解粒度时间组件(天,小时,分钟,秒等),并使用DateAdd()从值中减去它,例如
remainingAtLowerGranularity = DateAdd(granularity, -1 * numFoundInStep, value)
Run Code Online (Sandbox Code Playgroud)
要查找两个日期之间的差异,您需要使用函数DATEDIFF
select DATEDIFF(millisecond,'20010105 12:35:15.56786','20010101 23:45:21.12347')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17311 次 |
最近记录: |