Definir busqueda en criteria para fechas.

Hola espero esten bien, disculpen la pregunta ojala alguien me pueda ayudar, pero… alguien me podría decir como hacerle para definir un criterio de búsqueda por fechas, esto usando postgresql, a lo que me he fijado en el no se puede buscar una fecha usando un like, entonces ando buscando la manera de como realizar las búsquedas por medio de un igual como por ejemplo tengo esto en mi tabla donde si me realiza una búsqueda exitosa.




SELECT titulo_convocatoria, fecha_inicio_convovatoria, fecha_fin_convocatoria FROM convocatoria

WHERE fecha_inicio_convovatoria = '2011-05-03'



YII tiene definidas las busquedas por medio de criteria por un LIKE, ojala alguien me pueda ayudar que este es un error que tengo ya de hace tiempo y necesito poder estar buscando por esos tres campos le he intentado de la siguiente manera.




$criteria->condition = "fecha_inicio_convovatoria = ".$this->fecha_inicio_convovatoria;



Pero no me ha funcionado me aparece el error como lo muestra la imágen. Saludos.

La solución a eso por si alguien le sirve en algún momento, es solo eliminar el true en criteria, de esa manera me funciono…




$criteria->compare('fecha_inicio_convovatoria',$this->fecha_inicio_convovatoria); 



Cabe afirmar que he probado este uso en campos que sean date y me funciono pero en los que son fecha y hora no me funciono

Saludos.

yo uso el like en fechas de esta forma y funciona (en mysql)

seguramente en otras bases de datos existiran funciones similares a date_FORMAT

pero no comparo fechas, sino que comparo strings




$criteria->compare('date_FORMAT( t.fecha,\'%d/%m/%Y\' )',$this->fecha,true);



en postgres y/o Oracle prueba esto




$criteria->compare('to_char( t.fecha,\'dd/mm/yyyy\' )',$this->fecha,true);



Ref: http://developer.postgresql.org/pgdocs/postgres/functions-formatting.html

Hola horacio gracias por la contestación, fijate que si habia pensado en eso en un principio pero no he sabido como acomodar esta instrucción de sql como se hace en postgres.




select fecha_inicio_convovatoria from convocatoria where cast(fecha_inicio_convovatoria as date) = cast('2011-05-03' as date)



Si te fijas uso un cast, el cast me sirve para convertir un formato al que yo desee, indicando primero el nombre de campo que lo convertire a un tipo date, y eso lo puedo igualar a el resultado que mando en el caso la fecha y le digo que solo sera tipo fecha en su caso si fuera la fecha y aparte las horas minutos y segundos, con el cast le digo que se convertira todo eso a una fecha al igual si le digo que lo quiero en un string lo convertira a string etc., pero no se como indicarlo en yii de esta forma, en mi post anterior comento que si me funciono la búsqueda de fechas quitando el parámetro de true, pero esta indicación no se como hacerla en postgres, tu sabes como indicarlo??., lo intente indicar como me pusiste el ejemplo y no me funciono pero tampoco me arrojo un error. Como tu me lo indicas lo intente realizar de esta manera y no me busco la fecha:




//asi como me lo indicas lo intente.

$criteria->compare('to_char( t.fecha_inicio_convovatoria,\'dd/mm/yyyy\' )',$this->fecha_inicio_convovatoria,true);


$criteria->compare('to_char( t.fecha_inicio_convovatoria,\'yyyy/mm/dd\' )',$this->fecha_inicio_convovatoria,true);


//y le intente de la misma manera quitandole el true ni con el cast me realizo la búsqueda ni quitandole el true.

$criteria->compare('cast(fecha_fin_convocatoria as date) = cast('.$this->fecha_fin_convocatoria.' as date)',$this->fecha_fin_convocatoria,true);



Ojala tu sepas como realizar esto… y una duda de casualidad tu sabes como hacer para poner en un CGridView un calendario??, estoy buscando como poner el calendario de http://www.dynarch.com/projects/calendar/old/ que el código acomodado a yii es en esta url http://www.yiiframework.com/extension/calendar/#download. Y ando buscando la manera de poner ese código dentro de un CGridView ojala me puedas contestar las dos preguntas horacio de nuevo gracias por contestar. Saludos…

Hola de nuevo horacio, fijate que ya pude hacer que me arrojara el error con el cast, pero yii me indica que no puedo convertir el tipo integer a date y de como me lo indicaste tampoco funciono pero ya me pudo indicar el error, aunque hay un detalle que no se como hacerlo quizás tu si, pero haciendo un sql en postgres de esta manera




select fecha_inicio_convovatoria from convocatoria where fecha_inicio_convovatoria = to_date('2011-05-03','yyyy/mm/dd')



si me hace la búsqueda de la fecha esto lo hice guiandome en como me lo mencionas, pero el problema es como le puedo hacer en criteria para poder el nombre de campo primero y luego igualarlo.




//el nombre de campo como lo pongo de esta manera primero y le pongo un igual

fecha_inicio_convovatoria = to_date('2011-05-03','yyyy/mm/dd')



te comento esto porque no se como indicar en yii ese tipo de sql me podrías explicar como le puedo hacer ya que el error como me lo muestra me lo acomoda muy diferente a como te lo indico, este es el error:

CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[42883]: Undefined function: 7 ERROR: no existe la función to_date(date, unknown)

LINE 1: SELECT COUNT(*) FROM "convocatoria" "t" WHERE to_date( t.fec…

HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede desear agregar conversión explícita de tipos… The SQL statement executed was: SELECT COUNT(*) FROM “convocatoria” “t” WHERE to_date( t.fecha_inicio_convovatoria,‘yyyy/mm/dd’ ) LIKE :ycp0 (C:\wamp\www\yii\framework\db\CDbCommand.php:518)</p><pre>

Saludos.

prueba nuevamente este código (debería andar, lo acabo de probar)




$criteria->compare('to_char( t.fecha,\'dd/mm/yyyy\' )',$this->fecha,true);



luego mira el log (protected/runtime/application.log) y postea el query generado

Respecto a poner un calendario en CGridView, no te puedo ayudar

pero puedes probar generar la tabla tu mismo (sin usar CGridView)

Lo pongo tal cuál como me lo vuelves a indicar no me genero ningún warning en ese archivo o en su defecto error, simplemente cuando intente realizar la búsqueda no encontro ningun registro me puso el grid en blanco.

Ingresas la fecha con el formato dd/mm/yyyy?

en la base de datos tienes un registro con esa fecha?

tienes la columna fecha definida como safe en el model?

[color="#1C2837"][size="2"]mira el log (protected/runtime/application.log) y postea el query generado[/size][/color]

No tenia definido el campo en safe lo indique dentro de tal y si tengo un registro en la base de datos pero iniciando con año en vez de poner dd/mm/yyyy, lo pongo al reves yyyy/mm/dd, y ni asi me funciono, y no me genera ningún query en el archivo application.

Como comente en el segundo post de este tema la búsqueda me funciona de esa manera nada mas quitando el true pero quiero saber contruirla asi como en los sql que te he pasado…

el log lo debería generar.

verifica que en el index.php este esta linea:





defined('YII_DEBUG') or define('YII_DEBUG',true);



y que en el protected/config/main.php

este esta entrada y que levels incluya trace







		'log'=>array(

			'class'=>'CLogRouter',

			'routes'=>array(

				array(

					'class'=>'CFileLogRoute',

					'levels'=>'error, warning,trace',

				),

				// uncomment the following to show log messages on web pages


				array(

					'class'=>'CWebLogRoute',

				),


			),

		),




si habilitas





				array(

					'class'=>'CWebLogRoute',

				),




podrás ver la consulta en la misma pagina