我有四列 -
add_filter( 'woocommerce_ship_to_different_address_checked', '__return_false' );
我想计算E事件和C事件之间的时间。如何使用select语句执行此计算?
答案 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