我需要在datetime列上加入SQLalchemy中的两个表,但我不想考虑完整的日期时间,而只考虑它们的日期部分(即使日期的时间不相等,也要加入具有相似日期的两行)。
这是我现在所拥有的东西
import sqlalchemy as sq
...
first = meta.tables["schema.first"]
second = meta.tables["schema.second"]
select = sq.select([
first.c.id,
first.c.date,
first.c.value,
second.c.value])
.select_from(first.join(second, sq.and_(
first.c.id == second.c.id,
first.c.date == second.c.date
# exact match between datetimes is currently needed
)))
答案 0 :(得分:1)
要将时间戳截断为日精度,请使用PostgreSQL中的函数date_trunc(text, timestamp)
:
select = sq.select([first.c.id,
first.c.date,
first.c.value,
second.c.value])\
.select_from(first.join(second, sq.and_(
first.c.id == second.c.id,
sq.func.date_trunc('day', first.c.date) ==
sq.func.date_trunc('day', second.c.date)
)))
在这种情况下,您也可以将时间戳转换为日期:
sq.cast(first.c.date, sq.Date) == sq.cast(second.c.date, sq.Date)