• ベストアンサー

「文字が無効です」になる

PG初心者です。 SQLで下記のような文を実行すると「文字が無効です」というメッセージが出てしまいます。 WHERE句より前は間違っていないようです。 ""で括ったテーブル名等も間違いないことを確認済です(文字は伏せます)。 となると{ts…以下になると思いますが、何がまずいのでしょうか。 WHERE ("*****"."@@@_@@@@">={ts '1998-07-02 00:00:00'} AND "*****"."@@@_@@@@"<{ts '1998-07-03 00:00:00'})

質問者が選んだベストアンサー

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.1

> FROM > WHERE ( > "*****"."@@@_@@@@" >= {ts '1998-07-02 00:00:00'} > AND "*****"."@@@_@@@@" < {ts '1998-07-03 00:00:00'} > ); 上記はOracleのSQL構文ではありません。 OracleのSQL構文で書くとTO_DATEを使用します。 ※@@@_@@@@がDate型と想定しています。 Where ( "*****"."@@@_@@@@" >= TO_DATE('1998-07-02 00:00:00','yyyy-mm-dd hh24:mi:ss') AND "*****"."@@@_@@@@" < TO_DATE('1998-07-03 00:00:00','yyyy-mm-dd hh24:mi:ss') ); select * from emp Where ( emp.HIREDATE >= TO_DATE('1981-02-20 00:00:00','yyyy-mm-dd hh24:mi:ss') AND emp.HIREDATE < TO_DATE('1981-02-21 00:00:00','yyyy-mm-dd hh24:mi:ss') ); EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------------------- ------------------ ---------- -------- ---------- ---------- ---------- 7499 ALLEN SALESMAN 7698 81-02-20 1600 300 30 --- {ts '1998-07-03 00:00:00'})は、JDBCやODBC等のドライバがOracle用の書式に変換するようですが、この変換を行わないドライバを使用してSQLを投げているのなら当然エラーになると思います。 JDBCのリファレンスを見ると、JDBCドライバが変換すると書いてあります。 Oracle Database JDBC開発者ガイドおよびリファレンス 10g リリース2(10.2) http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/apxref.htm

key_ro
質問者

お礼

実行できました! ありがとうございます。

関連するQ&A