Python-cx_Oracle-returns ORA-01847:月日必须介于1和月的最后一天之间

Python-cx_Oracle-returns ORA-01847:月日必须介于1和月的最后一天之间,python,cx-oracle,Python,Cx Oracle,我正在使用python cx_oracle模块连接到oracle数据库。 当我尝试执行一个特定的查询时,我会得到“ORA-01847:月的某一天必须介于1和月的最后一天之间” 查询: select case when to_date (STOP_DATE, 'dd-mon-yy')='01-JAN-01' then '000000' else to_char(to_date(STOP_DATE,'dd-mon-yy'),'mmddyy') end STOP_DATE

我正在使用python cx_oracle模块连接到oracle数据库。 当我尝试执行一个特定的查询时,我会得到“ORA-01847:月的某一天必须介于1和月的最后一天之间”

查询:

select  case when to_date (STOP_DATE, 'dd-mon-yy')='01-JAN-01' then '000000' else  to_char(to_date(STOP_DATE,'dd-mon-yy'),'mmddyy') end STOP_DATE
                        from table1 where SYS_1= 1234 and rownum < 11
选择到日期(停止日期,'dd-mon-yy')='01-JAN-01'的情况,然后选择'000000'其他到字符(停止日期,'dd-mon-yy'),'mmddyy')结束停止日期
来自表1,其中SYS_1=1234,rownum<11
同样的查询在sqlDeveloper中也可以正常工作

非常感谢您的帮助

Python代码:

import cx_Oracle
connection = None
try:
    dsn_tns = cx_Oracle.makedsn("host", "port", service_name="serviceName")
    connection = cx_Oracle.connect(user="user", password="password", dsn=dsn_tns)
    c = connection.cursor()
    sqlStatement = r'''
                            select  case when to_date (STOP_DATE, 'dd-mon-yy')='01-JAN-01' then '000000' else  to_char(to_date(STOP_DATE,'dd-mon-yy'),'mmddyy') end STOP_DATE
                            from table1 where SYS_1= 1234 and rownum < 11

    '''
    c.execute(sqlStatement)
    resultSet = c.fetchall()
    if not len(resultSet) == 0:
            print("query successful!!!!!!!!!!")
            for row in resultSet:
                for items in row:
                   if items == None:
                      items = ""
                print (items)

    if connection:
        print('all executed')
        connection.close()

except Exception as e:
        print(e)
        if connection:
           connection.close()
导入cx\u Oracle
连接=无
尝试:
dsn\u tns=cx\u Oracle.makedsn(“主机”、“端口”、服务名称=“服务名称”)
connection=cx\u Oracle.connect(user=“user”,password=“password”,dsn=dsn\u tns)
c=连接。游标()
sqlStatement=r''
选择“截止日期(截止日期,'dd-mon-yy')='01-JAN-01',然后选择“000000”或“截止日期(截止日期,'dd-mon-yy'),'mmddyy')结束截止日期”
来自表1,其中SYS_1=1234,rownum<11
'''
c、 执行(sqlStatement)
resultSet=c.fetchall()
如果不是len(resultSet)==0:
打印(“查询成功!!!!!!!”)
对于结果集中的行:
对于第行中的项目:
如果项目==无:
items=“”
打印(项目)
如果连接:
打印('所有已执行')
连接。关闭()
例外情况除外,如e:
打印(e)
如果连接:
连接。关闭()

我想停止日期是一个字符列?是否有理由将停止日期存储为字符列而不是日期?这将消除您遇到的问题!您可能需要考虑只获取一行(在两种情况下都相同),以确保您不是简单地运行到数据问题中!您好@AnthonyTuininga,STOP_DATE是一个日期列,但格式不同。(yyyy-mm-dd HH:mm:SS)如果STOP_DATE是一个日期列,那么您应该改为:STOP_DATE=to_DATE('01-JAN-01','dd-MON-YY')