Sie können eine neue Spalte hinzufügen und manuell aktualisieren, wie von @gbn vorgeschlagen. Jetzt müssen Sie diese Spalte jedoch ständig mit Triggern zum Einfügen / Aktualisieren oder einem anderen Mechanismus auf dem neuesten Stand halten. In Anlehnung an die Vermutungen von @ gbn zu Tabellen- / Spaltennamen finden Sie hier einige verschiedene Ansätze, die keine ständige Wartung erfordern.
Berechnete Spalte
ALTER TABLE dbo.MyTable ADD NewIntColumn AS
CONVERT(INT, DATEDIFF(SECOND, '19000101', MyDateTimeColumn));
--or for Unix epoch
ALTER TABLE dbo.MyTable ADD NewIntColumn AS
CONVERT(INT, DATEDIFF(SECOND, '19700101', MyDateTimeColumn));
Sie können diese Spalte auch beibehalten und indizieren, um die Abfrageleistung gegen die Speicherung auszutauschen. Sie müssen jedoch eine geringfügige Änderung an der Berechnung vornehmen (wenn Sie versuchen, die oben genannten Informationen beizubehalten, wird ein Fehler angezeigt, dass die Berechnung nicht deterministisch ist):
ALTER TABLE dbo.MyTable ADD NewIntColumn AS
CONVERT(INT, DATEDIFF(SECOND, 0, MyDateTimeColumn)) PERSISTED;
-- or for Unix epoch
ALTER TABLE dbo.MyTable ADD NewIntColumn AS
CONVERT(INT, DATEDIFF(SECOND, 25567, MyDateTimeColumn)) PERSISTED;
Sie möchten die Spalte beibehalten, wenn Sie sich mehr Gedanken über die Leseleistung als über die Schreibleistung (oder den Speicher) machen.
Aussicht
Ein Vorteil einer Ansicht über eine neue Spalte besteht darin, dass Sie das Basistabellenschema nicht ändern müssen (oder sich Sorgen machen müssen, es auf dem neuesten Stand zu halten). Sie zahlen die Berechnungskosten zur Abfragezeit, was einer nicht persistenten berechneten Spalte entspricht.
CREATE VIEW dbo.vMyTable
AS
SELECT -- other columns,
MyDateTimeColumn,
NewIntColumn = DATEDIFF(...whichever calc above makes sense...)
FROM dbo.MyTable;
Laufzeit
Da die obigen Berechnungen nicht zu komplex sind, nehmen Sie die Berechnung einfach in Ihre Abfrage auf. Hoffentlich verwenden Sie gespeicherte Prozeduren für den Datenzugriff, damit Sie dies nicht oft wiederholen.