SQLAlchemy:转换为日期类型

Ameet SM

这是我的mssql代码段

Select
     Sum((Case
            When (me.status in ('CLOSED','VOID') and
            Convert(DATE,me.end_dt)=CONVERT(DATE,GETDATE()))
            Then 1 else 0
            end)) as completed,

     Sum((Case
            When datediff 
            ( hh, cast (CONVERT (DATE, GETDATE()) as varchar)+' '+ '00:00:00.000', me.due_dt)
            between 12 and 24 and me.status not in ('CLOSED','VOID')
            Then 1 else 0
            end)) as Count_12_to_24 

     from pvr_svc me with(nolock)

对于第一个查询块,这是我到目前为止尝试过的。

expr = func.sum(case([(and_(pvr_svc.status.in_(['CLOSED','VOID']), 
       (func.convert(DATE, pvr_svc.end_dt)== func.convert(DATE, func.current_date()))
       ),1)],else_=0)).label('com')

session.query(expr).scalar()

但是我说错了。

****** NotImplementedError:不知道如何对值进行文字引用(类'sqlalchemy.types.DATE')***

我在这里有几个问题,

Q1。如何将datetime列值(在上述情况下为me.end_dt)转换为DATE类型?

Q2。sqlalchemy中的GETDATE()等价于什么?(我尝试过func.current_date(),func.now())

Q3。什么是实现mssql代码片段的最后一块的正确方法?

我遍历了sqlalchemy doc,发现了关于stackoverflow的一些信息,下面是链接,

将选定的datetime转换为sqlalchemy中的日期

将日期与SQLAlchemy,SQLite进行比较

Ameet SM

这是我所拥有的解决方案,

from sqlalchemy import DATE, cast

expr1 = func.sum(case([(
        and_(
            (func.convert(literal_column('DATE'), pvr_svc.due_dt) == func.convert(literal_column('DATE'), func.getdate())), 
            pvr_svc.status.in_(['CLOSED','VOID'])
            ),1
        )],else_=0)).label('completed')

expr2 = func.sum(case([(
    and_(
        func.datediff(literal_column('hh'), cast(func.convert(literal_column('DATE'), func.getdate()), VARCHAR)
            +" "+"00:00:00.000",pvr_svc.due_dt)
            .between(0,12),~pvr_svc.status.in_(['CLOSED','VOID'])
        ),1)],else_=0)).label('Count_0_to_12')

session.query(expr1, expr2).all()

或者,

我们可以使用强制转换功能而不是转换功能。

expr1 = func.sum(
           case([(and_
             ((cast(pvr_svc.end_dt,DATE) == cast(func.getdate(),DATE)),
               pvr_svc.status.in_(['CLOSED','VOID'])
             ),1)],else_=0)
           ).label('com')

session.query(expr1).all()

强制转换和将转换转换为性能没有什么区别,因为强制转换函数在内部以sql中的转换函数实现。在此处查找更多信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将带日期的文本转换为日期类型

来自分类Dev

将Oracle数据类型转换为SQLAlchemy类型

来自分类Dev

将数据框的日期列转换为日期类型

来自分类Dev

熊猫将日期时间对象类型转换为日期时间

来自分类Dev

日期列未转换为日期时间类型

来自分类Dev

在Oracle SQL中将日期类型转换为数字类型(Excel)

来自分类Dev

在Python中将日期时间类型转换为元组

来自分类Dev

使用javascrip将输入类型的日期转换为毫秒?

来自分类Dev

在Postgres SQL中将数字类型转换为日期

来自分类Dev

熊猫-将float类型的列转换为日期时间

来自分类Dev

SQL:将 bigint 类型转换为格式化日期

来自分类Java

Android / Java将String日期转换为long类型

来自分类Dev

转换为“日期时间”类型的问题:“小时必须在 0..23”

来自分类Dev

Pyspark列:将字符串转换为日期类型

来自分类Dev

无法将std :: string转换为日期类型

来自分类Dev

Android:将日期类型转换为日历时出错

来自分类Dev

使用 Openpyxl 写入时将数据转换为日期类型

来自分类Dev

将文本转换为日期数据类型

来自分类Dev

将多列中的数据类型转换为日期

来自分类Dev

持续时间错误地转换为日期时间类型

来自分类Dev

将数据类型系列转换为日期时间

来自分类Dev

将Int数据类型转换为日期

来自分类Dev

将日期类型转换为仅显示时间

来自分类Dev

将时间戳转换为日期数据类型

来自分类Dev

将列类型从对象转换为日期格式-python

来自分类Dev

将字符串转换为日期类型

来自分类Dev

如何将熊猫系列转换为日期时间类型?

来自分类Dev

将“日期”数据转换为 datetime64[ns] 类型

来自分类Dev

将文本数据类型转换为日期

Related 相关文章

热门标签

归档