python oracle where子句包含的日期大于比较

时间:2017-06-28 23:00:41

标签: python-3.x datetime oracle11g between cx-oracle

我正在尝试使用cx_Oracle查询oracle DB(版本11.2)中的表,并在日期时间范围内的列中获取值。

我尝试了以下方法:

  1. here描述的子句之间尝试,但是游标获得0行

    parameters = (startDateTime, endDateTime)
    query = "select * from employee where joining_date between :1 and :2"
    cur = con.cursor()
    cur.execute(query, parameters)
    
  2. 尝试了TO_DATE()函数和Date''限定符。仍然没有结果介于Between或> =运算符之间。值得注意的是<操作员工作。我也得到了相同的查询并在sql客户端中尝试,查询返回结果。代码:

    #returns no rows:
    query = "select * from employee where joining_date >= TO_DATE('" + startDateTime.strftime("%Y-%m-%d") + "','yyyy-mm-dd')"
    cur = con.cursor()
    cur.execute(query)
    #tried following just to ensure that some query runs fine, it returns results:
    query = query.replace(">=", "<")
    cur.execute(query)
    
  3. 关于为什么between和&gt; =运算符失败的任何指针? (我的第二种方法与Oracle date comparison in where clause中的答案一致,但对我来说仍然不起作用)

    我正在使用python 3.4.3并在Windows 7机器上使用cx_Oracle 5.3和5.2与oracle客户端11g

2 个答案:

答案 0 :(得分:1)

假设您的员工表包含字段emp_id,并且您的查询应检索带有emp_id=1234567的行。

制作执行以下查询的程序的两份副本

query = "select to_char(:1,'YYYY-MM-DD HH24:MI:SS')||' >= '||to_char(joining_date,'YYYY-MM-DD HH24:MI:SS')||' >= '||to_char(:2,'YYYY-MM-DD HH24:MI:SS') resultstring from employee where emp_id=1234567"

query="select to_char(joining_date,'YYYY-MM-DD HH24:MI:SS')||' >= '||to_char(TO_DATE('" + startDateTime.strftime("%Y-%m-%d") + "','yyyy-mm-dd'),'YYYY-MM-DD HH24:MI:SS') resultstring from employee where emp_id=1234567"

向我们展示列resultstring

的代码和值

答案 1 :(得分:0)

当您使用parameterized queries时,您正在将SQL查询构建为字符串。您不能使用参数化来替换比较运算符,但您应该将其用于日期。

另请注意,引用的答案使用PostgreSQL参数化格式,而Oracle要求您使用Object.Equals格式。