在mysql中减去2个日期时间(一个24小时格式,一个格式为am / pm格式)

时间:2012-05-09 10:57:17

标签: mysql datetime

我正在尝试使用mysql创建查询。

select ID,NCOde,ifnull(EndTime,now())-starttime from xxx where starttime between 
'2012-05-09 00:00:00' and '2012-05-09 23:59:59' 

问题是ifnull(EndTime,now())以24小时格式返回datetime,而starttime使用am / pm格式。

我尝试过使用DATE_FORMAT(starttime, '%m-%d-%Y %T'),但似乎操作将日期时间类型更改为其他类型。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

使用STR_TO_DATE()starttime字符串转换为MySQL DATETIME

STR_TO_DATE(starttime, '%m-%d-%Y %r')

然后使用TIMEDIFF()减去两次:

select ID,NCOde,
  TIMEDIFF(ifnull(EndTime,now()), STR_TO_DATE(starttime, '%m-%d-%Y %r'))
from xxx
where STR_TO_DATE(starttime,'%m-%d-%Y %r')
        between '2012-05-09 00:00:00' and '2012-05-09 23:59:59'

您应该考虑将starttime列的数据类型更改为DATETIMETIMESTAMP。另请注意,这假设EndTime已经是这种数据类型,否则您也必须使用它执行类似的转换。

答案 1 :(得分:0)

使用DATE_SUB()功能。

再加上eggyal说的话。