Anda dapat menambahkan kolom baru dan memperbaruinya secara manual seperti yang disarankan @gbn, tetapi sekarang Anda harus terus-menerus memperbarui kolom ini dengan memasukkan / memperbarui pemicu atau mekanisme lainnya. Meminjam dugaan @ gbn pada nama tabel / kolom, berikut adalah beberapa pendekatan berbeda yang tidak memerlukan pemeliharaan konstan.
Kolom yang Dihitung
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));
Anda juga dapat bertahan dan mengindeks kolom ini, menukarkan kinerja permintaan untuk penyimpanan, tetapi Anda harus melakukan sedikit perubahan pada perhitungan (mencoba bertahan di atas akan menghasilkan kesalahan tentang perhitungan yang bersifat non-deterministik):
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;
Anda ingin mempertahankan kolom jika Anda lebih mementingkan kinerja baca daripada kinerja menulis (atau penyimpanan).
Melihat
Salah satu manfaat dari tampilan kolom baru adalah Anda tidak perlu mengubah skema tabel dasar (atau khawatir tentang selalu memperbaruinya). Anda membayar biaya perhitungan pada waktu kueri, yang sama dengan kolom yang dihitung tetap.
CREATE VIEW dbo.vMyTable
AS
SELECT -- other columns,
MyDateTimeColumn,
NewIntColumn = DATEDIFF(...whichever calc above makes sense...)
FROM dbo.MyTable;
Runtime
Karena perhitungan di atas tidak terlalu rumit, cukup sertakan perhitungan dalam kueri Anda. Semoga Anda menggunakan prosedur tersimpan untuk akses data sehingga Anda tidak sering mengulanginya.