Vous pouvez ajouter une nouvelle colonne et la mettre à jour manuellement comme l'a suggéré @gbn, mais maintenant vous devez constamment garder cette colonne à jour avec des déclencheurs d'insertion / mise à jour ou un autre mécanisme. En empruntant les suppositions de @ gbn sur les noms de table / colonne, voici quelques approches différentes qui ne nécessitent pas de maintenance constante.
Colonne calculée
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));
Vous pouvez également persister et indexer cette colonne, en compromettant les performances des requêtes pour le stockage, mais vous devrez apporter une légère modification au calcul (essayer de persister ce qui précède produira une erreur sur le calcul non déterministe):
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;
Vous souhaitez conserver la colonne si vous êtes plus préoccupé par les performances de lecture que par les performances d'écriture (ou de stockage).
Vue
Un avantage d'une vue sur une nouvelle colonne est que vous n'avez pas à modifier le schéma de la table de base (ou à vous soucier de le mettre à jour). Vous payez le coût du calcul au moment de la requête, qui est le même qu'une colonne calculée non persistante.
CREATE VIEW dbo.vMyTable
AS
SELECT -- other columns,
MyDateTimeColumn,
NewIntColumn = DATEDIFF(...whichever calc above makes sense...)
FROM dbo.MyTable;
Durée
Étant donné que les calculs ci-dessus ne sont pas trop complexes, incluez simplement le calcul dans votre requête. J'espère que vous utilisez des procédures stockées pour l'accès aux données, donc vous ne répétez pas cela souvent.