我正在使用 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 的后端实现的日期查询?