Ви можете додати новий стовпець і оновити його вручну, як було запропоновано @gbn, але тепер вам доведеться постійно оновлювати цей стовпець за допомогою тригерів вставлення / оновлення чи іншого механізму. Запозичення @ gbn про назви таблиць / стовпців, ось кілька різних підходів, які не потребують постійного обслуговування.
Обчислена колона
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));
Ви також можете зберегти та проіндексувати цей стовпець, торгуючи ефективністю запитів для зберігання, але вам доведеться внести невеликі зміни в обчислення (спроба наполягати на вищесказаному призведе до помилки, що обчислення не детерміновані):
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;
Ви хочете зберегти стовпець, якщо вас більше турбує ефективність читання, ніж продуктивність запису (або зберігання).
Вид
Однією з переваг перегляду нового стовпця є те, що вам не доведеться змінювати схему базової таблиці (або турбуватися про її оновлення). Ви оплачуєте витрати на обчислення за час запиту, який такий же, як і неперсинований обчислений стовпець.
CREATE VIEW dbo.vMyTable
AS
SELECT -- other columns,
MyDateTimeColumn,
NewIntColumn = DATEDIFF(...whichever calc above makes sense...)
FROM dbo.MyTable;
Час виконання
Оскільки наведені вище розрахунки не надто складні, просто включіть розрахунок у свій запит. Сподіваємось, ви використовуєте збережені процедури для доступу до даних, тому ви не повторюєте це часто.