如何在SQL中的DATE TIME中执行算术运算

时间:2017-03-04 23:21:03

标签: sql sql-server datetime

我有四列 -

add_filter( 'woocommerce_ship_to_different_address_checked', '__return_false' );

我想计算E事件和C事件之间的时间。如何使用select语句执行此计算?

2 个答案:

答案 0 :(得分:0)

从组件值创建日期类型非常简单:

with data as (select '20161231' as c_date, '2143' as c_time)
select 
    convert(
        datetime,
        stuff(stuff(stuff(c_date + ' ' + c_time, 12, 0, ':'), 7, 0, '-'), 5, 0, '-'),
        120
    ) as c_datetime
from data;

使用datediff()计算时差。你没有说明你想要输出的样子,所以我不会尝试猜测。那里应该还有其他一百个问题,其中包含与您的问题相关的信息。

另请注意,我没有附加' 00'到字符串来表示秒。虽然我无法追查官方文件以证实这一点,但它似乎有效。所以为了安全起见,你也可能想要解决这个问题。可以说,可能有一种更通用的格式,如ISO 8601,这将是一个更好的"解。你明白了。

答案 1 :(得分:0)

将字符串转换为日期时间的小问题。然后我们使用DateDiff()来计算两个日期之间的差异。

Declare @YourTable table (C_Date varchar(255),C_Time varchar(255),E_Date varchar(255),E_Time varchar(255))
Insert Into @YourTable values
('20161231','2143','20161230','1600')

;with cte as (
Select * 
      ,CDT = try_convert(DateTime,C_Date+' '+stuff(C_Time,3,0,':'))
      ,EDT = try_convert(DateTime,E_Date+' '+stuff(E_Time,3,0,':'))
 from @YourTable
) 
Select CDT
      ,EDT
      ,Duration  = concat(DateDiff(DD,EDT,CDT),' ',Format(DateAdd(Second,DateDiff(SECOND,EDT,CDT),'1899-12-31'),'HH:mm:ss'))
      ,AsSeconds = DateDiff(SECOND,EDT,CDT)
      ,AsMinutes = DateDiff(MINUTE,EDT,CDT)
 From cte

返回

CDT                     EDT                     Duration     AsSeconds   AsMinutes
2016-12-31 21:43:00     2016-12-30 16:00:00     1 05:43:00   106980      1783