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

时间:2020-09-23 10:45:47

标签: mysql datetime

我在MySQL数据库中有两个String列。这两个列是通过以下方式从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中的哪个函数可用于计算差异以获得这两列之间的小时数?

2 个答案:

答案 0 :(得分:1)

您称它们为string dates,但实际上它们是UNIX时间戳(以毫秒为单位)(也称为Javascript时间戳)。这就是System.currentTimeMillis()生成的。它是Java long数据项和MySQL BIGINT数据项。您可以将其存储在字符串中。 (如果需要,您可以以这种方式存储它,但是搜索和排序存储为字符串的数字是一种不可靠的混乱;请注意!)

典型的Javascript时间戳(或UNIX时间戳,以毫秒为单位)是一个大整数,例如16008581763744561 600 858 176 374 456

您可以像这样使用FROM_UNIXTIME()将这样的时间戳转换为MySQL TIMESTAMP值

    FROM_UNIXTIME(column * 0.001)

为什么将列值乘以0.001(即除以1000)?因为FROM_UNIXTIME()以秒为单位获取时间戳,而System.currentTmeMillis()以毫秒为单位生成时间戳。

然后您可以像这样使用DATEDIFF()

    DATEDIFF(FROM_UNIXTIME(laterTs*0.001),FROM_UNIXTIME(earlierTs*0.001))

这给出了整数天。

如果您需要以其他单位表示的时差,例如小时,分钟或日历季度,则可以使用TIMESTAMPDIFF()。这样您可以节省数小时。

TIMESTAMPDIFF(HOUR,
              FROM_UNIXTIME(laterTs*0.001),
              FROM_UNIXTIME(earlierTs*0.001));

您可以使用SECONDMINUTEHOURDAYWEEKMONTHQUARTER或{ {1}}作为此功能中的时间单位。 专业提示:如果可以,请使用DBMS的日期算术函数。他们已经为您解决了各种情况。

而且,顺便说一句,如果您这样声明列(Timestamp with a millisecond precision: How to save them in MySQL):

YEAR

通过这些时间,您可以更轻松地建立索引并进行搜索。

答案 1 :(得分:0)

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

其中(1600858176374-1600944576374)是时间戳记,而(24 60 60 * 1000)是一天中的磨坊

相关问题