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.

War es hilfreich?

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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top