Yeni bir sütun ekleyebilir ve manuel olarak @gbn önerdiği gibi güncelleyebilirsiniz, ancak şimdi bu sütunu ekleme / güncelleme tetikleyicileri veya başka bir mekanizma ile sürekli güncel tutmanız gerekir. Borçlama @ gbn'nin tablo / sütun adlarına ilişkin tahminleri, burada sürekli bakım gerektirmeyen birkaç farklı yaklaşım var.
Hesaplanan Sütun
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));
Ayrıca, depolama için sorgu performansını değiştirerek bu sütunu kalıcı olarak dizine ekleyebilir, ancak hesaplamada küçük bir değişiklik yapmanız gerekir (yukarıdakileri sürdürmeye çalışmak, hesaplamanın deterministik olmadığı konusunda bir hata verir):
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;
Okuma performansı hakkında yazma performansından (veya depolamasından) daha fazla endişeleniyorsanız sütunu kalıcı tutmak istersiniz.
Görünüm
Yeni bir sütuna göre görünümün bir yararı, temel tablo şemasını değiştirmeniz (veya güncelliğini koruma konusunda endişelenmeniz) gerekmemesidir. Hesaplama maliyetini, kalıcı olmayan hesaplanmış sütunla aynı olan sorgu zamanında ödersiniz.
CREATE VIEW dbo.vMyTable
AS
SELECT -- other columns,
MyDateTimeColumn,
NewIntColumn = DATEDIFF(...whichever calc above makes sense...)
FROM dbo.MyTable;
Çalışma süresi
Yukarıdaki hesaplamalar aşırı karmaşık olmadığından, hesaplamayı sorgunuza ekleyin. Umarım veri erişimi için saklı yordamlar kullanırsınız, böylece bunu sık sık tekrarlamazsınız.