sql - operaciones - Seleccionar de la tabla conociendo solo la fecha sin tiempo(ORACLE)
update fecha y hora en sql (6)
Pruebe de la siguiente manera.
Select * from t1 where date(col_name)="8/3/2010"
Estoy intentando recuperar registros de la tabla sabiendo que la fecha en la columna contiene la fecha y la hora.
Supongamos que tengo una tabla llamada t1
que contiene solo dos name
columna y date
respectivamente.
Los datos almacenados en la columna datan así 8/3/2010 12:34:20 PM
.
Deseo recuperar este registro mediante esta consulta, por ejemplo (nota que no pongo la hora):
Select * From t1 Where date="8/3/2010"
Esta consulta no me da nada!
¿Cómo puedo recuperar la date
conociendo solo la date
sin el tiempo?
Convierta su columna de fecha al formato correcto y compare:
SELECT * From my_table WHERE to_char(my_table.my_date_col,''MM/dd/yyyy'') = ''8/3/2010''
Esta parte
to_char(my_table.my_date_col,''MM/dd/yyyy'')
Causará cadena ''8/3/2010''
Personalmente, suelo ir con:
select *
from t1
where date between trunc( :somedate ) -- 00:00:00
and trunc( :somedate ) + .99999 -- 23:59:59
Puede usar la función entre para obtener todos los registros entre 2010-08-03 00: 00: 00: 000 Y 2010-08-03 23: 59: 59: 000
DATE
es una palabra reservada en Oracle, así que estoy usando column-name your_date
en your_date
lugar.
Si tienes un índice en your_date
, yo usaría
WHERE your_date >= TO_DATE(''2010-08-03'', ''YYYY-MM-DD'')
AND your_date < TO_DATE(''2010-08-04'', ''YYYY-MM-DD'')
o BETWEEN
:
WHERE your_date BETWEEN TO_DATE(''2010-08-03'', ''YYYY-MM-DD'')
AND TO_DATE(''2010-08-03 23:59:59'', ''YYYY-MM-DD HH24:MI:SS'')
Si no hay índice o si no hay demasiados registros
WHERE TRUNC(your_date) = TO_DATE(''2010-08-03'', ''YYYY-MM-DD'')
debería ser suficiente TRUNC
sin parámetro elimina horas, minutos y segundos de una DATE
.
Si el rendimiento realmente importa, considere poner un Function Based Index
en esa columna:
CREATE INDEX trunc_date_idx ON t1(TRUNC(your_date));
trunc(my_date,''DD'')
le dará solo la fecha y no el momento en Oracle.