Aunque upvoted la respuesta marcada como correcta.Quería tocar algunas cosas para cualquiera que tropezara con esto.
En general, si está filtrando específicamente en Fecha valores solo. Microsoft recomienda utilizar el formato de idioma neutral de ymd
o y-m-d
.
Tenga en cuenta que la forma '2007-02-12' se considera independiente del idioma solamente para la fecha de los tipos de datos, DATETIME2 y DateTimeOffset.
Hacer una comparación de fechas utilizando el enfoque anterior es simple. Considere el siguiente ejemplo ingenioso.
--112 is ISO format 'YYYYMMDD'
declare @filterDate char(8) = CONVERT(char(8), GETDATE(), 112)
select
*
from
Sales.Orders
where
CONVERT(char(8), OrderDate, 112) = @filterDate
En un mundo perfecto, la realización de cualquier manipulación de la columna filtrada debe evitarse ya que esto puede impedir que SQL Server desde la utilización de índices de manera eficiente. Dicho esto, si los datos que está almacenando solo se refieren a la fecha y no a la hora, considere almacenar como DATETIME
con la medianoche como hora. Porque:
Cuando SQL Server convierte el literal al tipo de la columna filtrada, que asume la medianoche, cuando no se indica una parte del tiempo. Si desea que dicho filtro devuelva todas las filas a partir de la fecha especificada, debe asegurarse de que almacene todos los valores a medianoche como la hora.
Por lo tanto, suponiendo que solo le preocupe la fecha, y almacene sus datos como tales. La consulta anterior se puede simplificar a:
--112 is ISO format 'YYYYMMDD'
declare @filterDate char(8) = CONVERT(char(8), GETDATE(), 112)
select
*
from
Sales.Orders
where
OrderDate = @filterDate
Creo que quería decir = en lugar de ==. – GilM
@GilM: ¡por supuesto! ;-) Demasiado C# hoy ;-) –