python 包含日期大于比较的 oracle where 子句
python oracle where clause containing date greater than comparison
我正在尝试使用 cx_Oracle 在 oracle DB(版本 11.2)中查询 table 并获取列中包含日期时间范围内的值的行。
我尝试了以下方法:
已按照所述 here 尝试在子句之间进行尝试,但游标得到 0 行
parameters = (startDateTime, endDateTime)
query = "select * from employee where joining_date between :1 and :2"
cur = con.cursor()
cur.execute(query, parameters)
尝试了 TO_DATE() 函数和 Date'' 限定符。 Between 或 >= 运算符仍然没有结果。值得注意的是 < 运算符有效。我也得到了相同的查询并在 sql 客户端中尝试,查询结果为 returns。代码:
#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)
关于为什么 between 和 >= 运算符对我来说失败的任何指示? (我的第二种方法符合中的答案,但仍然对我不起作用)
我正在使用 python 3.4.3,并在 windows 7 机器
上使用 cx_Oracle 5.3 和 5.2 与 oracle 客户端 11g
当您应该使用 parameterized queries 时,您正在将 SQL 查询构建为字符串。您不能使用参数化来替代比较运算符,但您应该将其用于日期。
另请注意,引用的答案使用 PostgreSQL 参数化格式,而 Oracle 要求您使用 ":name"
格式。
假设您的员工 table 包含字段 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
我正在尝试使用 cx_Oracle 在 oracle DB(版本 11.2)中查询 table 并获取列中包含日期时间范围内的值的行。
我尝试了以下方法:
已按照所述 here 尝试在子句之间进行尝试,但游标得到 0 行
parameters = (startDateTime, endDateTime) query = "select * from employee where joining_date between :1 and :2" cur = con.cursor() cur.execute(query, parameters)
尝试了 TO_DATE() 函数和 Date'' 限定符。 Between 或 >= 运算符仍然没有结果。值得注意的是 < 运算符有效。我也得到了相同的查询并在 sql 客户端中尝试,查询结果为 returns。代码:
#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)
关于为什么 between 和 >= 运算符对我来说失败的任何指示? (我的第二种方法符合
我正在使用 python 3.4.3,并在 windows 7 机器
上使用 cx_Oracle 5.3 和 5.2 与 oracle 客户端 11g当您应该使用 parameterized queries 时,您正在将 SQL 查询构建为字符串。您不能使用参数化来替代比较运算符,但您应该将其用于日期。
另请注意,引用的答案使用 PostgreSQL 参数化格式,而 Oracle 要求您使用 ":name"
格式。
假设您的员工 table 包含字段 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