Вы можете добавить новый столбец и обновить его вручную, как предложено @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;
время выполнения
Поскольку приведенные выше вычисления не слишком сложны, просто включите это вычисление в свой запрос. Надеемся, что вы используете хранимые процедуры для доступа к данным, поэтому вы не будете часто повторять это.