计算MySQL中两个字符串日期之间的小时差?

计算MySQL中两个字符串日期之间的小时差?,mysql,datetime,Mysql,Datetime,我在MySQL数据库中有两个字符串列。这两列是通过以下方式从Java程序填充的: System.currentTimeMillis(); //first column System.currentTimeMillis(); + someStringHours //second column; the String, someStringDays reprensents some number of days, let's say 5 hours in millis... MySQL中的哪个函数

我在MySQL数据库中有两个字符串列。这两列是通过以下方式从Java程序填充的:

System.currentTimeMillis(); //first column
System.currentTimeMillis(); + someStringHours //second column; the String, someStringDays reprensents some number of days, let's say 5 hours in millis...
MySQL中的哪个函数可以用来计算这两列之间的时差,从而得到这两列之间的小时数

SELECT (1600858176374-1600944576374)/(24*60*60*1000) as Days

其中(1600858176374-1600944576374)是时间戳,(246060*1000)是一天中的米尔斯

您称它们为
字符串日期
,但它们实际上是以毫秒为单位的UNIX时间戳(也称为Javascript时间戳)。这就是产生的原因。它是一个Java
long
数据项和一个MySQL
BIGINT
数据项。您可以将其存储在字符串中。(如果必须的话,您可以这样存储,但是搜索和排序存储为字符串的数字是一个不可靠的混乱;小心!)

典型的Javascript时间戳(或UNIX时间戳,以毫秒为单位)是一个大整数,如
1600858176374456
<代码>1600 858 176 374 456

您可以将这样的时间戳转换为MySQL时间戳值,如下所示

    FROM_UNIXTIME(column * 0.001)
    DATEDIFF(FROM_UNIXTIME(laterTs*0.001),FROM_UNIXTIME(earlierTs*0.001))
为什么要将列值乘以0.001(即除以1000)?因为FROM_UNIXTIME()以秒为单位获取时间戳,而
System.currentTMemilis()以毫秒为单位生成时间戳

那么你可以这样用

    FROM_UNIXTIME(column * 0.001)
    DATEDIFF(FROM_UNIXTIME(laterTs*0.001),FROM_UNIXTIME(earlierTs*0.001))
这将给出一个整数天数

如果需要其他单位的时差,例如小时、分钟或日历季度,可以使用。这会让你在小时数上有所不同

TIMESTAMPDIFF(HOUR,
              FROM_UNIXTIME(laterTs*0.001),
              FROM_UNIXTIME(earlierTs*0.001));
您可以使用
分钟
小时
季度
,或
作为此函数中的时间单位。 专业提示:尽可能使用DBMS的日期算术函数。他们已经为你解决了各种各样的边缘问题

顺便说一下,如果您像这样声明列():


到目前为止,您将更容易索引和搜索。

谢谢您的回答。嗯,我认为它们只是以我描述的方式产生的字符串。我不知道这是UNIX时间戳还是Javascript时间戳。你是说如果我数据库中的字符串是UNIX时间戳,那么我可以忽略你的答案吗?还有一个问题,为什么要乘以0.001?S**t,我刚刚意识到我需要的是小时而不是天的差异。