2009-12-12 141 views
4

我正在使用Zend_Db查询表。我有一些WHERE条款需要日期,并且不清楚(乍一看)如何做到“正确的方式”。 Zend_Db是否提供了抽象,所以我不需要关心后端(Oracle,MySQL等)如何预期其日期?或者我需要按照我的后端预期的方式来设置格式。Zend_Db和基于日期的查询

我试图与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的后端实现的日期查询?

回答

4

我一定会喜欢这样的功能,但是,我在Zend Framework中没有找到任何东西。他们的跟踪器中的这个issue也让我非常有信心它还没有在那里。

+0

谢谢你救了我更好的支持寻找不在那里的东西的一个晚上:) – 2009-12-12 00:50:14

+0

参见http://framework.zend.com/issues/browse/ZF-8538它看起来像它将被实施 – 2009-12-14 20:34:55

0

基于这样的事实,我不看到

abstract class Zend_Db_Adapter_Abstract 

任何合同的暗示“日期转换成统一格式”的功能,我想回答我的问题是没有,但有一个从来不知道的大型框架,它看起来像是一种抽象成熟的东西。

1

很多DB供应商(包括Oracle)都支持这种格式:

$table = $this->getDbTable();       
$select = $table->select()->where('1 = ?', 1);   
$select->where('PO_DATE = ?', '02-Dec-2009'); 

所以我倾向于这样做,直到他们在Zend_Db的日期/串转换