结合distinct和cast函数的数据库查询

时间:2012-09-03 20:19:17

标签: sql sqlalchemy

我有一个带有日期时间字段的SQLAlchemy声明性类,如:

class Logon(Base):
    id = Column(Integer, primary_key=True)
    timestamp = Column(types.DateTime)
    event_type = Column(types.Integer)

我有兴趣获得至少有一个事件的所有日期,因此我使用了一个独特的条款来玩:

session.query(sqlalchemy.func.distinct(Logon.timestamp))

显然这是因为时间戳在同一天内并不是唯一的。然而,奇怪的是我获得了unicode字符串而不是datetime实例:

 (u'2012-07-26 11:05:01.000000',), (u'2012-07-26 11:12:53.000000',), (u'2012-07-27 16:53:28.000000',)

我真正想要的是使用日期而不是日期时间的独特运算符:

session.query(sqlalchemy.func.distinct(sqlalchemy.cast(Logon.timestamp,sqlalchemy.Date)))

SQL对我来说也很好看:

SELECT distinct(CAST(logons.timestamp AS DATE)) AS distinct_1 
FROM logons

但令我惊讶的是,我的查询结果是带有年份的单个条目:

[(2012,)]

我可以通过简单的循环获取日期列表,但我有兴趣学习如何在SQL和/或SQLAlchemy中组合强制转换和不同的运算符

0 个答案:

没有答案