Problem indiziert Sicht und diese Gruppe von in SQL Server 2008 R2 Erstellen
-
08-10-2019 - |
Frage
Ich möchte mit einem solchen T-SQL indizierte Sicht erstellen:
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))
Ich muss machen Gruppe nur Datumsteil der Spalte Object_CreationDate
(Typ datetime2 ).
Auch möchte ich Set Index für die Spalten Theme_Id
UND Object_CreationDate
in der abgeleiteten Ansicht.
Wenn ich cast(CONVERT(varchar(8), m.Mention_CreationDate, 112)AS DateTime)
in SELECT - werde ich Probleme mit dem Index auf dieser Spalte erhalten. Da diese Spalte (Object_CreationDate
) ist nicht deterministisch.
Ich frage mich, ob es möglich ist, ein Problem zu lösen.
Lösung
ersetzen ...
CONVERT(varchar(8), t2.Object_CreationDate, 112))
... mit
DATEADD(day, DATEDIFF(day, 0, t2.Object_CreationDate), 0)
--OR
CAST(t2.Object_CreationDate AS date)
Das zweite Format ist SQL Server 2008+ nur, die erste ist allgemeiner
Dies entfernt die Zeitkomponente von einem Datetime-Wert in dem Datum / Datumzeit-Datentyp Domäne ohne Zwischen locale abhängig Datums-Zeitformaten
Sehen Sie diese Antworten: One und < a href = "https://stackoverflow.com/questions/1138142/best-way-to-convert-and-validate-a-date-string"> zwei (Kommentare)