使用cursor.execute命令在pyodbc中返回日期

0 投票
1 回答
1695 浏览
提问于 2025-04-17 09:53

我正在尝试使用pyodbc从Oracle数据库中获取符合特定条件的日期。例如,我想获取2010年1月1日到2011年1月1日之间的所有日期。

为此,我这样做:

x = cursor.execute("""select Column from Table where OutputDate > '2010/01/01' and OutputDate < '2011/01/01'"""

在我使用Access数据库时,类似的做法是有效的,但现在却出现了这个错误:

pyodbc.DataError: ('22007', '[22007] [Microsoft][ODBC driver for Oracle][Oracle]ORA-01861: literal does not match format string (1861) (SQLExecDirectW)')

我使用的是Windows 7,所用的驱动程序是Microsoft ODBC for Oracle(从错误信息来看,这应该很明显)。

“literal does not match format string”是什么意思?这是否意味着我不能在这个数据库中使用<和>来比较日期?有没有人能帮我一下?

非常感谢,
Alex

1 个回答

1

字面值与格式字符串不匹配的意思是你在尝试比较一个日期和一个字符串。把你的查询改成下面这样,它就能正常工作了。

select column
  from table 
 where outputdate between to_date('2010/01/01','yyyy/mm/dd') 
       and to_date('2011/01/01','yyyy/mm/dd')

当然,如果 outputdate 不是一个日期,那你最好也把它转换成日期,这样才能进行比较。

注意可以在这种情况下使用的 between 操作符。

这里有一个Oracle数据类型的列表 在这里;这个网站对所有内容都很有帮助。

我还想补充一下,我个人更喜欢用 cx_Oracle 来从Python与Oracle进行通信;不过这只是个人喜好。

撰写回答