Możesz dodać nową kolumnę i ręcznie ją zaktualizować zgodnie z sugestią @gbn, ale teraz musisz stale aktualizować tę kolumnę za pomocą wyzwalaczy wstawiania / aktualizacji lub innego mechanizmu. Pożyczając przypuszczenia @ gbn na temat nazw tabel / kolumn, oto kilka różnych podejść, które nie wymagają stałej konserwacji.
Kolumna obliczona
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));
Możesz również zachować i zindeksować tę kolumnę, odkładając wydajność zapytania na przechowywanie, ale musisz wprowadzić niewielką zmianę w obliczeniach (próba utrzymania powyższego spowoduje błąd, że obliczenia nie są deterministyczne):
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;
Chcesz zachować tę kolumnę, jeśli bardziej martwi Cię wydajność odczytu niż wydajność zapisu (lub pamięci masowej).
Widok
Jedną z zalet widoku nowej kolumny jest to, że nie trzeba zmieniać schematu tabeli podstawowej (ani martwić się o aktualizację). Płacisz koszt obliczeń w czasie zapytania, który jest taki sam jak nietrwałej kolumny obliczeniowej.
CREATE VIEW dbo.vMyTable
AS
SELECT -- other columns,
MyDateTimeColumn,
NewIntColumn = DATEDIFF(...whichever calc above makes sense...)
FROM dbo.MyTable;
Środowisko wykonawcze
Ponieważ powyższe obliczenia nie są zbyt skomplikowane, wystarczy uwzględnić obliczenia w zapytaniu. Mamy nadzieję, że korzystasz z procedur przechowywanych w celu uzyskania dostępu do danych, więc nie powtarzasz tego często.