fechas fecha extraer comparar sql database postgresql date

extraer - comparar fechas en postgresql



¿Cómo comparar fechas en campos de fecha y hora en Postgresql? (4)

@Nicolai tiene razón sobre el lanzamiento y por qué la condición es falsa para cualquier dato. Supongo que prefiere el primer formulario porque quiere evitar la manipulación de la fecha en la cadena de entrada, ¿correcto? no necesitas tener miedo:

SELECT * FROM table WHERE update_date >= ''2013-05-03''::date AND update_date < (''2013-05-03''::date + ''1 day''::interval);

He estado enfrentando un escenario extraño al comparar fechas en postgresql (versión 9.2.4 en windows). Tengo una columna en mi tabla que dice update_date con el tipo ''timestamp without timezone''. El cliente puede buscar en este campo con fecha única (es decir, 2013-05-03) o fecha con el tiempo (es decir, 2013-05-03 12:20:00). Esta columna tiene el valor como marca de tiempo para todas las filas actualmente y tiene la misma parte de fecha (2013-05-03) pero la diferencia en la parte de tiempo.

Cuando comparo esta columna, obtengo resultados diferentes. Como los siguientes:

select * from table where update_date >= ''2013-05-03'' AND update_date <= ''2013-05-03'' -> No results select * from table where update_date >= ''2013-05-03'' AND update_date < ''2013-05-03'' -> No results select * from table where update_date >= ''2013-05-03'' AND update_date <= ''2013-05-04'' -> results found select * from table where update_date >= ''2013-05-03'' -> results found

Mi pregunta es ¿cómo puedo hacer que la primera consulta sea posible para obtener resultados, me refiero a por qué la tercera consulta está funcionando pero no la primera?

¿Puede alguien ayudarme con esto? Gracias por adelantado.


Cuando compara update_date >= ''2013-05-03'' postgres arroja valores al mismo tipo para comparar valores. Por lo tanto, su ''2013-05-03'' se convirtió en ''2013-05-03 00:00:00''.

Entonces, para update_date = ''2013-05-03 14:45:00'' tu expresión será la siguiente:

''2013-05-03 14:45:00'' >= ''2013-05-03 00:00:00'' AND ''2013-05-03 14:45:00'' <= ''2013-05-03 00:00:00''

Esto siempre es false

Para resolver este problema, envía update_date a date :

select * from table where update_date::date >= ''2013-05-03'' AND update_date::date <= ''2013-05-03'' -> Will return result



Usa la conversión de fecha para compararla con la fecha: prueba esto:

select * from table where TO_DATE(to_char(timespanColumn,''YYYY-MM-DD''),''YYYY-MM-DD'') = to_timestamp(''2018-03-26'', ''YYYY-MM-DD'')