Truncar atributos a las fecha en :conditions


#1

muy buenas dias compañeros de la lista, reciban un saludo muy especial.

ahora como siempre, les pido otro favor mas, como hago para truncar los
atributos de hora y minutos de una fecha en un condition?

:conditions => [“salida_at = ?”, fecha])

salida_at tiene el formato: 2007-06-11 10:46:21
y fecha es formato 2007-06-11

luego la consulta no devuelve nada.

cordial saludo.


#2

:conditions => [“salida_at between ? and ?”, fecha, fecha + 1]

El día 16/07/07, William B. removed_email_address@domain.invalid
escribió:


#3

Silvio Q. wrote:

:conditions => [“salida_at between ? and ?”, fecha, fecha + 1]

El día 16/07/07, William B. removed_email_address@domain.invalid
escribió:

Hola Silvio.

pero esta solucion no me trae registros de dos dias?

necesito es que los regsitros que me devuelva sean del dia que envio en
el parámetro, solo de esa fecha.

saludos y gracias


#4

fch = fecha+"%"

:conditions => [“salida_at like ?”, fch])

esta fue la solucion con que solucione el problema, puede que haya otra
mejor, si desean la comparten.

saludos.


#5

No creo que sea la mejor solucion, debido a que muy probablemente, el
motor
de base de datos no te tome los indices que eventualmente definas sobre
ese
campo. Cualquier tipo de “truncamiento” que hagas sobre un campo fecha
hora,
puede traerte problemas de performance a largo plazo.
El between funciona bien sobre estos campos.
En el caso …

:conditions => [“salida_at between ? and ?”, fecha, fecha + 1]

… te va a traer todos los registros que esten entre 2007-07-17
00:00:00 y
2007-07-18 00:00:00 …
por lo cual, solo te traeria aquellos del dia 17, dejando de lado todos
los
del dia 18 (ya que 2007-07-18 00:00:01 queda por fuera del between)

Otra variante, es armando el string a mano …

:conditions => "salida_at between ‘#{fecha}’ and ‘#{fecha} 23:59:59’ "

… que te cubriria en el caso que dudes de la existencia de un registro
con
salida_at sin horas ni minutos.

Espero que te sirva,
Saludos!

El día 17/07/07, William B. removed_email_address@domain.invalid
escribió:


#6

El día 17/07/07, Emilio T. removed_email_address@domain.invalid escribió:

En el caso …

Otra variante, es armando el string a mano …

:conditions => "salida_at between ‘#{fecha}’ and ‘#{fecha} 23:59:59’ "

No recomiendo esto, no es una buena practica y te puede traer
problemas de seguridad.

Usa “?” . Para mas detalles mira el capitulo que habla de seguridad en

rails en el “Agile …” y SQL Injections.

Saludos!


Ror-es mailing list
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es

Muy cierto, una mala practica que arrastro.
La cuestion se salva “escapando” previamente “fecha”.

fecha.gsub!(/[’]/, ‘\\’’)

o controlando que sea una fecha …

raise ‘No es una fecha’ unless fecha.match /\d{4}-\d{2}-\d{2}/

Con eso se evita la inyeccion en estos casos en los que la ? no nos
alcanza.
Silvio


#7

On 7/17/07, Silvio Q. removed_email_address@domain.invalid wrote:

2007-07-18 00:00:00 …
por lo cual, solo te traeria aquellos del dia 17, dejando de lado todos los
del dia 18 (ya que 2007-07-18 00:00:01 queda por fuera del between)

Otra variante, es armando el string a mano …

:conditions => "salida_at between ‘#{fecha}’ and ‘#{fecha} 23:59:59’ "

No recomiendo esto, no es una buena practica y te puede traer
problemas de seguridad.

Usa “?” . Para mas detalles mira el capitulo que habla de seguridad en
rails en el “Agile …” y SQL Injections.

Saludos!