SQL查询在日期上连接两个表,其中一个是来自unixepoch的数字日期(天数)

时间:2018-02-12 00:03:17

标签: sql date sqlite

我正在尝试在日期列上连接两个表,唯一的问题是一个日期格式化为整数,它是1970-01-10(unixepoch)的天数。另一个日期格式化为MM / DD / YYYY格式的日期。什么功能允许我通过将日期添加到unixepoch来实质上转换数字日期?我已尝试过以下查询,但它会将所有日期覆盖为1970-01-01或产生错误。

INNER JOIN table3 AS T3
   ON T3.date = DATE(T1.date, 'unixepoch')

数据库中的一些随机例子

  1. T1.Date T3.Date
  2. 17432 12/28/2017
  3. 17460 12/20/2017
  4. 17464 12/25/2017
  5. 17440 12/17/2017
  6. 17500 12/05/2017
  7. 更新:我已使用以下Select语句将T1.Date转换为DATE,仍在寻找如何转换'文本' MM / DD / YYYY T3.Date为了加入

    SELECT DATE('1970-01-01',  '+' || T1.Date || ' day') FROM T1
    

2 个答案:

答案 0 :(得分:0)

您可以使用以下连接逻辑:

FROM table1 AS T1
INNER JOIN table3 AS T3
    ON substr(T3.Date,7) || substr(T3.Date,1,2) || substr(T3.Date,4,2)  =
       datetime(T1.date, 'unixepoch')

请注意,虽然以MM/DD/YYYY格式将日期存储为文本很糟糕,但将日期存储为不同的格式可能同样糟糕。

答案 1 :(得分:0)

日期/时间功能是高度特定于数据库的。但是,我会将unix epoch格式转换为日期:

from table1 t1 join
     table3 t3
     on t1.date = date '1970-01-01' + t3.date * interval '1 day'

我应该注意,Unix纪元通常是指自1970-01-01以来的秒数或毫秒数,但可以在interval表达式中轻松调整。

以上是ANSI SQL。因此,它可能只在Postgres中编写。但是其他数据库中也有类似的功能,只是语法不同。