Problema con la creación de vista indizada y el grupo A en SQL Server 2008 R2
-
08-10-2019 - |
Pregunta
Quiero crear vista indizada con tal de T-SQL:
Select
Table1_ID,
cast(CONVERT(varchar(8),
t2.Object_CreationDate, 112)AS DateTime) as Object_CreationDate ,
Count_BIG(*) as ObjectTotalCount
from
[dbo].Table2 t2 inner join [dbo].Table1 t1 on ...
Group BY
Table1_ID, CONVERT(varchar(8), t2.Object_CreationDate, 112))
Necesito hacer grupo por sólo datepart de Object_CreationDate
columna (tipo datetime2 ).
También quiero índice de conjuntos de columnas Theme_Id
Y Object_CreationDate
en la vista derivada.
Si uso cast(CONVERT(varchar(8), m.Mention_CreationDate, 112)AS DateTime)
en SELECT - Voy a problemas con el índice en esta columna. Debido a esta columna (Object_CreationDate
) no es determinista.
Me pregunto si es posible resolver un problema.
Solución
reemplazar ...
CONVERT(varchar(8), t2.Object_CreationDate, 112))
... con
DATEADD(day, DATEDIFF(day, 0, t2.Object_CreationDate), 0)
--OR
CAST(t2.Object_CreationDate AS date)
El segundo formato es SQL Server 2008+ solamente, el primero es más general
Esto elimina el componente de tiempo de un valor de fecha y hora en la fecha / fecha y hora dominio tipo de datos sin ningún tipo de formatos de fecha y hora dependientes de localización intermedia
Consulte estas respuestas: Una y < a href = "https://stackoverflow.com/questions/1138142/best-way-to-convert-and-validate-a-date-string"> dos (comentarios)