today query mostrar fecha equal actual sql sql-server

sql - query - Comparando resultados con la fecha de hoy?



sql server datetime equal today (9)

¡No estoy seguro de lo que estás pidiendo!

sin embargo

SELECT GETDATE()

Te dará la fecha y hora actual

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

Te conseguirá la fecha con el tiempo establecido en 00:00:00

¿Hay alguna forma de utilizar 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.


No estoy seguro exactamente de lo que intenta hacer, pero parece que GETDATE() es lo que está buscando. GETDATE() devuelve una fecha y hora, pero si no está interesado en el componente de tiempo, puede lanzar una fecha.

SELECT GETDATE() SELECT CAST(GETDATE() AS DATE)


Si tiene una tabla con solo una fecha almacenada (sin tiempo) y desea obtenerla por "ahora", puede hacer esto:

SELECT * FROM tbl WHERE DATEDIFF(d, yourdate, GETDATE())=0

Esto da como resultado filas cuya diferencia de día es 0 (así que hoy).


Sobre la base de las respuestas anteriores, tenga en cuenta un punto importante, también debe manipular la columna de la tabla para asegurarse de que no contiene el fragmento de tiempo del tipo de datos datetime.

A continuación se muestra un pequeño script de muestra 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.

EDITAR:
Siguiendo el comentario de @dwurf (gracias) sobre el efecto que el ejemplo anterior puede tener en el rendimiento, me gustaría sugerir lo siguiente en su lugar. 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 existe una función nativa de Now () en SQL Server, por lo que debe usar:

select GETDATE() --2012-05-01 10:14:13.403

puede obtener el día, mes y año por separado haciendo:

select DAY(getdate()) --1 select month(getdate()) --5 select year(getdate()) --2012

si está en el servidor sql 2008, existe la fecha de fecha FECHA que tiene solo la fecha, no la hora:

select cast (GETDATE() as DATE) --2012-05-01


Simplemente ponga a cero el elemento de tiempo de la fecha. p.ej

select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)

He usado GetDate ya que es una función MSSQL, ya que has etiquetado, pero Now () es probablemente MySQL o estás usando la llamada a la función ODBC, aún debería funcionar si simplemente reemplazas una con la otra.


OK, 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 tipos de fecha pura, podemos hacer una comparación simple con la fecha de hoy.

Para mantener las cosas de forma rápida y agradable, 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).

Servidor MS SQL: ( SQL Fiddle )

Primero, usando DATE

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) ;

Utilizando 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 ;

Uso de TIMESTAMP WITH TIME ZONE:

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 )

Usar cadenas de fecha:

select * from dates where dte = (select date(''now'')) ;

Usar cadenas de fecha y hora:

select dtm from datetimes where dtm >= datetime(date(''now'')) and dtm < datetime(date(''now'', ''+1 day'')) ;

Usando marcas de tiempo de Unix:

select datetime(dtm, ''unixepoch'', ''localtime'') from datetimes where dtm >= strftime(''%s'', date(''now'')) and dtm < strftime(''%s'', date(''now'', ''+1 day'')) ;

Copia de seguridad del código SQL Fiddle


Puedes 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