我有start_date
和end_date
的表格。我需要找到持续时间(end_date-start_date
)。有人可以建议我如何在查询中这样做吗?我是否会在查询中以duration=end_date-start_date
为例获得一个新变量?
EDIT 如果我使用mminus,它会给我:
2012-07-01减去2012-01-01 = 600
2011-07-27 - 2011-07-06 = 21,如何在6个月内600天?所以我认为这是几天? 即使日期是在月中,是否有功能实际获得多少个月。 例如比如“3月6日”和“7月27日”是2个月
答案 0 :(得分:3)
返回期间P1和P2之间的月数。 P1和P2的格式应为YYMM或YYYYMM。请注意,句点参数P1和P2不是日期值。所以试试
SELECT PERIOD_DIFF(
DATE_FORMAT('2011-07-27','%Y%m'),
DATE_FORMAT('2011-06-03','%Y%m')
) AS durationInMonths
答案 1 :(得分:1)
如果您想知道DateTime不同,可以使用TimeDiff
select
(Hour(Duration) / 24)/365 as Year,
(Hour(Duration) / 24)%365 as Day,
(Hour(Duration) % 24) as Hours,
MINUTE(Duration) as Minutes,
SECOND(Duration) as Seconds
from
(
SELECT ADDTIME(NOW(),'1000:27:50') as end_datetime, NOW() as start_datetime,
TIMEDIFF(ADDTIME(NOW(),'1000:27:50'), NOW()) AS Duration
) x;
如果您想知道日期不同,可以使用DateDiff()
select DATEDIFF('2011-06-06','2011-05-01');
答案 2 :(得分:1)
您可以使用*但是为了获得持续时间,您需要在其后添加额外的列
select *, DATEDIFF(updated_at, created_at) from users;
要获得最佳实践,最好为用户命名,为额外列命名。 所以你可以在顶部看到持续时间标题。将sql过程导出为excel是很好的。
select u.*, DATEDIFF(updated_at, created_at) as duration from users u;
同样从您的php或rails代码中,您可以调用给定的变量名称。在rails中,
users =User.find_by_sql("select u.*, DATEDIFF(updated_at, created_at) as duration from users u")
users.first.duration
答案 3 :(得分:0)
SELECT end_date - start_date AS duration FROM table ...