¿Hay alguna manera de usar la función Now() en SQL para seleccionar valores con la fecha actual? Tenía la impresión de que Now() contendría la hora y la fecha, pero la fecha de hoy tendría el tiempo establecido en 00:00:00 y, por lo tanto, esto nunca coincidiría.¿Comparando resultados con la fecha de hoy?
Respuesta
No hay nativa Ahora() en SQL Server lo que debe utilizar:
select GETDATE() --2012-05-01 10:14:13.403
usted puede conseguir el día, mes y año por separado haciendo:
select DAY(getdate()) --1
select month(getdate()) --5
select year(getdate()) --2012
si están en sql server 2008, existe la fecha de fecha FECHA que tiene solo la parte de la fecha, no la hora:
select cast (GETDATE() as DATE) --2012-05-01
Ahora es una función ODBC, por lo que puede invocarse en MSSQL utilizando select {fn Now()} – Paul
Bien, hagamos esto correctamente. Seleccione las fechas coincidentes hoy, usando índices si están disponibles, con todos los diferentes tipos de fecha y hora presentes.
El principio aquí es el mismo en cada caso. Tomamos las filas donde está la columna de fecha o después de la medianoche más reciente (fecha de hoy con hora 00:00:00) y antes de la próxima medianoche (fecha de mañana con hora 00:00:00, pero excluyendo cualquier cosa con ese valor exacto)
Para los tipos de fecha pura, podemos hacer una comparación simple con la fecha de hoy.
Para mantener las cosas buenas y rápidas, evitamos explícitamente cualquier manipulación de las fechas almacenadas en el DB (el LHS de la cláusula where
en todos los ejemplos a continuación). Esto podría desencadenar un escaneo de tabla completo ya que la fecha tendría que calcularse para cada comparación. (Este comportamiento parece variar según DBMS, YMMV).
MS SQL Server: (SQL Fiddle)
primer lugar, utilizando FECHA
select * from dates
where dte = CAST(CURRENT_TIMESTAMP AS DATE)
;
Ahora con DATETIME:
select * from datetimes
where dtm >= CAST(CURRENT_TIMESTAMP AS DATE)
and dtm < DATEADD(DD, 1, CAST(CURRENT_TIMESTAMP AS DATE))
;
Por último, con DATETIME2:
select * from datetimes2
where dtm2 >= CAST(CURRENT_TIMESTAMP AS DATE)
and dtm2 < DATEADD(DD, 1, CAST(CURRENT_TIMESTAMP AS DATE))
;
MySQL: (SQL Fiddle)
usando fecha:
select * from dates
where dte = cast(now() as date)
;
Usando DATETIME:
select * from datetimes
where dtm >= cast((now()) as date)
and dtm < cast((now() + interval 1 day) as date)
;
PostgreSQL: (SQL Fiddle)
usando fecha:
select * from dates
where dte = current_date
;
Usando TIMESTAMP sin tiempo ZONA:
select * from timestamps
where ts >= 'today'
and ts < 'tomorrow'
;
Oracle: (SQL Fiddle)
usando fecha:
select to_char(dte, 'YYYY-MM-DD HH24:MI:SS') dte
from dates
where dte >= trunc(current_date)
and dte < trunc(current_date) + 1
;
Usando TIMESTAMP:
select to_char(ts, 'YYYY-MM-DD HH24:MI:SS') ts
from timestamps
where ts >= trunc(current_date)
and ts < trunc(current_date) + 1
;
SQLite: (SQL Fiddle)
Uso de cadenas de fecha:
select * from dates
where dte = (select date('now'))
;
el uso de cadenas de fecha y hora:
select dtm from datetimes
where dtm >= datetime(date('now'))
and dtm < datetime(date('now', '+1 day'))
;
Uso de marcas de tiempo UNIX:
select datetime(dtm, 'unixepoch', 'localtime') from datetimes
where dtm >= strftime('%s', date('now'))
and dtm < strftime('%s', date('now', '+1 day'))
;
Usando 'CONVERTIR (VARCHAR' para comparar fechas no es el mejor enfoque. Es mejor mantener las fechas como fechas (por ejemplo, 'CAST (CURRENT_TIMESTAMP AS DATE)' o 'DATEADD (DAY, 0, DATEDIFF (DAY, 0, CURRENT_TIMESTAMP))'. http://stackoverflow.com/questions/1177449/mejor-aproximación-a-eliminar-tiempo-parte-de-fecha-hora-en-servidor-sql – GarethD
Gracias GarethD, he actualizado mi respuesta – dwurf
¿Estaba realmente después del servidor SQL? :) – mezamorphic
seguro exactamente lo que estamos tratando de hacer, pero suena como GETDATE()
es lo que está buscando . GETDATE()
devuelve una fecha y hora, pero si no está interesado en el componente de tiempo, puede enviar una fecha.
SELECT GETDATE()
SELECT CAST(GETDATE() AS DATE)
Just zero off the time element of the date. p.ej.
select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
He usado GetDate ya que es una función de MSSQL, como se ha etiquetado, pero ahora() es probablemente MySQL o que está utilizando la llamada de función ODBC, debería funcionar si sólo se reemplaza con uno el otro.
¡No estoy seguro de lo que está pidiendo!
Sin embargo
SELECT GETDATE()
le dará el fecha y hora actuales
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
le conseguirá sólo la fecha con el tiempo ajustado en 00:00:00
Sobre la base del anterior respuestas, tenga en cuenta un punto importante, también necesita manipular la columna de la tabla para asegurarse de que no contiene el fragmento de tiempo de la fecha tipo de datos Ime.
A continuación se muestra un pequeño script de ejemplo que demuestra lo anterior:
select getdate()
--2012-05-01 12:06:51.413
select cast(getdate() as date)
--2012-05-01
--we're using sysobjects for the example
create table test (id int)
select * from sysobjects where cast(crdate as date) = cast(getdate() as date)
--resultset contains only objects created today
drop table test
espero que esto ayude.
EDIT:
siguiente comentario @dwurf (gracias) por el efecto del ejemplo anterior puede tener en el rendimiento, me gustaría sugerir la siguiente vez. Creamos un rango de fechas entre hoy a la medianoche (inicio del día) y el último milisegundo del día (el servidor SQL cuenta hasta .997, por eso reduzco 3 milisegundos). De esta manera evitamos manipular el lado izquierdo y evitar el impacto en el rendimiento.
select getdate()
--2012-05-01 12:06:51.413
select dateadd(millisecond, -3, cast(cast(getdate()+1 as date) as datetime))
--2012-05-01 23:59:59.997
select cast(getdate() as date)
--2012-05-01
create table test (id int)
select * from sysobjects where crdate between cast(getdate() as date) and dateadd(millisecond, -3, cast(cast(getdate()+1 as date) as datetime))
--resultset contains only objects created today
drop table test
No siempre es lo mejor que puedes hacer. Si tienes un millón de fechas en una mesa, esto arruinará rápidamente tu plan de ejecución. – dwurf
Si usted tiene una mesa con sólo una fecha almacenada (sin tiempo) y desea obtener los de "ahora", entonces usted puede hacer esto:
SELECT * FROM tbl WHERE DATEDIFF(d, yourdate, GETDATE())=0
Esto resulta en filas qué día la diferencia es 0 (así que hoy).
Puede probar este código sql;
SELECT [column_1], [column_1], ...
FROM (your_table)
where date_format(record_date, '%e%c%Y') = date_format(now(), '%e%c%Y')
donde created_date entre CURRENT_TIMESTAMP-180 y CURRENT_TIMESTAMP
- 1. PHP: Fecha de "Yesterday", "Hoy"
- 2. jQuery datepicker - cambiar la fecha de "hoy"?
- 3. PostgreSQL, verificando la fecha relativa al "hoy"
- 4. ¿Cómo saber si la fecha es hoy?
- 5. Buscar registros con fecha y hora que coincidan con la fecha de hoy - Ruby on Rails
- 6. MySQL Seleccionar fecha igual a hoy
- 7. la consulta con NHibernate en la fecha de hoy es entre publishDate y la fecha de caducidad
- 8. Comparando String a Entero da resultados extraños
- 9. Fecha de vencimiento hoy en Java
- 10. Selenium IDE: ¿Cómo obtengo la fecha de hoy?
- 11. ¿Cómo puedo obtener la fecha judía de hoy en C#?
- 12. C# 30 días a partir de la fecha de hoy
- 13. ¿Cómo restar 4 meses de la fecha de hoy?
- 14. Comparando fechas en C con (Usando la biblioteca time.h)
- 15. Django Quiero imprimir la fecha y la hora para hoy
- 16. ¿Cómo verificar si la fecha de entrada es igual a la fecha de hoy?
- 17. WPF DatePicker predeterminado a la fecha de hoy
- 18. iOS 5 - Configurar la fecha mínima de UIDatePicker para "hoy"
- 19. oráculo fecha sql a más tardar hoy
- 20. Código de Javascript para mostrar la fecha de ayer y la fecha de hoy
- 21. comparando cadena con la enumeración
- 22. Comparando dos fechas
- 23. Uso del control CompareValidator para comparar la fecha de entrada del usuario con la fecha de hoy
- 24. iPhone, ¿cómo configuro la fecha mínima de mis selectores de fecha para hoy en el código?
- 25. Rellenar campo de fecha de formulario de Acrobat con la fecha de hoy solo si el campo está vacío
- 26. Obtenga la fecha de hoy en Jekyll con marcado de líquido
- 27. Construir fecha y hora usando la fecha de hoy a una hora específica
- 28. SELECCIONAR filas MySQL donde la fecha de hoy se encuentra entre dos columnas FECHA
- 29. Manera correcta de dar formato a la fecha con cadenas como hoy, ayer, mañana, etc.
- 30. Comparando un NSDate con [NSDate date]
por favor, puesto que su estructura de la tabla. ¿Sus valores de fecha en la tabla tienen un componente de tiempo? –
Por favor, publique el resultado que desea. –
Posible duplicado http://stackoverflow.com/questions/1177449/best-approach-to-remove-time-part-of-datetime-in-sql-server – GarethD