Zend_Db を使用してテーブルをクエリしています。日付にする必要がある句がいくつかWHERE
ありますが、これを「正しい方法」で行う方法が(一見すると)明確ではありません。Zend_Db は抽象化を提供するので、バックエンド (Oracle、MySQL など) がその日付をどのように期待するかを気にする必要はありませんか? または、バックエンドが期待する方法でフォーマットする必要がありますか。
Oracleベースのデータベースで次のことを試しています(PO_DATEはタイムスタンプフィールドです)
$table = $this->getDbTable();
$select = $table->select()->where('1 = ?', 1);
$select->where('PO_DATE = ?', '2009-12-02');
次の例外が発生します
<b>Message:</b> 1843 ORA-01843: not a valid month SELECT "TABLE_NAME".* FROM "SYSTEM"."TABLE_NAME" WHERE (1 = 1) AND (PO_DATE = *'2009-12-02') </p>
私はこのようなことができることに気づきました
$date = new Zend_Db_Expr(
"to_date('2009-12-02', 'YYYY-MM-DD')"
);
$select->where('PO_DATE = ?', $date);
しかし、それは私をOracleの日付ベースの式に結びつけており、SQL抽象化レイヤーを使用する目的を部分的に無効にしています。
Zend_Db を使用したバックエンド実装とは関係なく、日付クエリを実行する一般的な方法はありますか?