ejemplos - Excluir funciones de la cláusula where en el servidor Sql
like sql (2)
Use comparaciones del rango de fechas. Por ejemplo,
SELECT officeid, rdate
FROM dbo.mytable
Where OfficeID = OfficeID
--Filter by dates that are between January 1st, midnight, inclusive, and
--May 1st, exclusive, in the desired year
AND h.rDate >= Convert(DateTime,''1/1/'' + Convert(VarChar(4),@year))
AND h.rDate < Convert(DateTime,''5/1/'' + Convert(VarChar(4),@year))
He utilizado la query
continuación en uno de mis stored procedures
SELECT officeid, rdate
FROM dbo.mytable
Where OfficeID = OfficeID
AND YEAR(h.rDate) = @year
AND MONTH(h.rDate) BETWEEN 1 AND 4
La consulta anterior no puede ser un SARG ( Search Argument)
debido al uso de fuctions MONTH
y YEAR
en la Where clause
. Esto lleva a la Index scan
durante la ejecución del stored procedure
. ¿Hay alguna forma de volver a escribir la consulta anterior para manejar la lógica anterior (sin function
)
(PD: rdate
es datetime
datetype y @year
es INT
tipo de datos)
Use pseudo valores ..
Esta función siguiente es SARGABLE (pero será larga), ya que CAST (DATETIME to DATE) es SARAGABLE , por lo que se usará Index.
Ejemplo:
Cast(h.rDate as DATE)
between datefromparts(@year,01,01)
and datefromparts(@year,04,30)