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.
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>
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.
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…
'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',
),
),
),