在两个不同的数据库中的表之间加入,时间戳略有不同(MySQL)

时间:2018-01-21 14:06:25

标签: mysql sql datetime join mariadb

根据MySQL -- join between tables in 2 different databases?的建议,我使用以下格式检索来自不同mysql数据库的两个表中共享列值的数据。

2018-01-21 23:30:05

我想从表中获取相同日期,小时和分钟的共享值。但是,我意识到,因为来自不同数据库的两个表的timestamp列中的时间戳值在记录2018-01-21 23:30:15与{{1}}的秒数方面略有不同,因此我无法检索任何共同数据。我如何修改我的查询,以便我可以查询来自两个不同数据库的两个表之间关于时间戳值的公共数据,而忽略了“秒”'时间戳列的一部分?

2 个答案:

答案 0 :(得分:1)

您可以使用

 ON t2.datestamp BETWEEN t1.datestamp - INTERVAL 2 SECOND
                     AND t1.datestamp + INTERVAK 2 SECOND

代表ON操作中的JOIN子句。这将允许4秒钟的比赛窗口。

当然,如果你将窗口设置得太宽,你会得到一些你不想要的匹配,如果你设置得太窄,你会错过一些。

答案 1 :(得分:1)

虽然我认为O.Jones'答案是解决问题的更好方法,如果你真的需要比较两个时间戳"忽略'秒'部分"你可以做到以下几点:

SELECT <...>
FROM A.table1 t1
JOIN B.table2 t2
  ON t2.column2 BETWEEN date_format(t1.column1, '%Y-%m-%d %H:%i:00')
                    AND date_format(t1.column1, '%Y-%m-%d %H:%i:59')

或更准确:

  ON  t2.column2 >= date_format(t1.column1, '%Y-%m-%d %H:%i:00')
  AND t2.column2 <  date_format(t1.column1, '%Y-%m-%d %H:%i:00') + interval 1 minute

  ON  t2.column2 >= t1.column1 - interval second(t1.column1) second
  AND t2.column2 <  t1.column1 - interval second(t1.column1) second + interval 1 minute