È possibile aggiungere una nuova colonna e aggiornarla manualmente come suggerito da @gbn, ma ora è necessario mantenere costantemente aggiornata questa colonna con i trigger di inserimento / aggiornamento o altri meccanismi. Prendendo in prestito le ipotesi di @ gbn sui nomi di tabelle / colonne, qui ci sono un paio di approcci diversi che non richiedono una manutenzione costante.
Colonna calcolata
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));
Potresti anche persistere e indicizzare questa colonna, scambiando le prestazioni delle query per l'archiviazione, ma dovrai apportare una leggera modifica al calcolo (provare a persistere quanto sopra produrrà un errore sul calcolo non deterministico):
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;
Si desidera mantenere la colonna se si è più preoccupati per le prestazioni di lettura che per le prestazioni di scrittura (o archiviazione).
Visualizza
Un vantaggio di una vista su una nuova colonna è che non è necessario modificare lo schema della tabella di base (o preoccuparsi di mantenerlo aggiornato). Paghi il costo del calcolo al momento della query, che è lo stesso di una colonna calcolata non persistente.
CREATE VIEW dbo.vMyTable
AS
SELECT -- other columns,
MyDateTimeColumn,
NewIntColumn = DATEDIFF(...whichever calc above makes sense...)
FROM dbo.MyTable;
Runtime
Poiché i calcoli sopra riportati non sono eccessivamente complessi, è sufficiente includere il calcolo nella query. Spero che tu stia utilizzando le procedure memorizzate per l'accesso ai dati, quindi non lo ripeti spesso.