Bạn có thể thêm một cột mới và cập nhật thủ công như @gbn đã đề xuất, nhưng bây giờ bạn phải liên tục cập nhật cột này với các kích hoạt chèn / cập nhật hoặc một số cơ chế khác. Mượn dự đoán của @ gbn về tên bảng / cột, đây là một vài cách tiếp cận khác nhau không cần bảo trì liên tục.
Cột tính toán
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));
Bạn cũng có thể kiên trì và lập chỉ mục cột này, đánh đổi hiệu năng truy vấn để lưu trữ, nhưng bạn sẽ cần thực hiện một thay đổi nhỏ cho phép tính (cố gắng duy trì ở trên sẽ dẫn đến lỗi về tính toán không xác định):
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;
Bạn sẽ muốn duy trì cột nếu bạn quan tâm đến hiệu suất đọc hơn hiệu suất ghi (hoặc lưu trữ).
Lượt xem
Một lợi ích của chế độ xem trên một cột mới là bạn không phải thay đổi lược đồ bảng cơ sở (hoặc lo lắng về việc cập nhật nó). Bạn phải trả chi phí tính toán tại thời điểm truy vấn, giống như một cột được tính không tồn tại.
CREATE VIEW dbo.vMyTable
AS
SELECT -- other columns,
MyDateTimeColumn,
NewIntColumn = DATEDIFF(...whichever calc above makes sense...)
FROM dbo.MyTable;
Thời gian chạy
Vì các tính toán trên không quá phức tạp, chỉ cần đưa tính toán vào truy vấn của bạn. Hy vọng rằng bạn đang sử dụng các thủ tục được lưu trữ để truy cập dữ liệu để bạn không lặp lại điều này thường xuyên.