2017-06-28 16 views
0

oracle DB(バージョン11.2)の表に問合せを行い、datetime範囲の列に値を持つ行を取得するためにcx_Oracleを使用しようとしています。 hereに記載されるようにpython oracle where比較節より大きい日付を含む句

  1. 句間試みたが、カーソルは0行TO_DATE()関数と日付 '修飾子を試み

    parameters = (startDateTime, endDateTime) 
    query = "select * from employee where joining_date between :1 and :2" 
    cur = con.cursor() 
    cur.execute(query, parameters) 
    
  2. を取得:

    は、私は、次のアプローチを試みました。 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) 
    

任意のポインタ? (私の第2のアプローチは、Oracle date comparison in where clauseで答えと一致していたが、それでも私のために動作しません)私のpython 3.4.3を使用しています

をし、WindowsでのOracleクライアント11gの7機でcx_Oracle 5.3と5.2を使用

+0

見当もつかないの値を表示してくださいちょうど考え...私はyyyを日付形式の要素として見たことがない、そして、それが物事を混乱させるかどうかわからない。私はあなたが「yyyy」(4桁の年)またはおそらく「yy」を意味すると仮定します。それを修正し、それが役立つかどうかを確認してください。 – mathguy

+0

はい、yyyはここの入力ミスです。私のコードはyyyyを修正しました – Sandip

答えて

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" 

を照会実行プログラムの2つのコピーが、本当に、私たちのコードと列resultstring

+0

実際に私は問題を理解していました。同じスキーマを持つ2つのデータベースがありました。私はクエリを壊して、SQLクライアント(私は間違って他のDBで実行されていた)で同じ結果を得て、結果を得ていました。最後にそれを見つけて固定しました。 私はあなたの回答を回答としてマークします。これと同様のクエリは、これをもっと早く把握するのに役立ちました。 – Sandip

0

parameterized queriesを使用する必要がある場合は、SQLクエリを文字列として作成しています。比較演算子を代入するためにパラメータ化を使用することはできませんが、日付に使用する必要があります。

また、参照される回答はPostgreSQLのパラメータ化形式を使用しますが、Oracleでは":name"形式を使用する必要があります。

+0

入力していただきありがとうございますが、質問の最初の試みはパラメータ化されたクエリを使用しています。私が提供したリンクとほとんど同じですが、トリプルクォートを使って文字列リテラルを定義する点は1つだけです。だからうまくいくはずだった。それとも、私はそこに何かを逃している? cx_Oracleは、そのページの ":number"形式をサポートする必要があります。 – Sandip

+0

私は悪いです。何も見つからないと思われます。パラメータ化されたアプローチが期待されます。私がOracle構文を覚えているように(非常に長い時間前から)、あなたは '' MM-DD-YYYY''のようなリテラル文字列を日付定数として使うことができます。多分代替策の策定に役立つでしょうか? – holdenweb

関連する問題