>Pensavo a
>convert(datetime, anno + '/' + mese + '/' + giorno + ' ' + ora
>+ ':' + minuti) as dataApp
>
>e poi usare il dateDiff con CURRENT_TIMESTAMP
Ciao escaflowne,
perché non utilizzare il formato ISO ANSI SQL-92 (quindi una stringa 'YYYYMMDD hh:mm') ?
Guarda il seguente esempio:
USE tempdb;
GO
CREATE TABLE dbo.myDates(
DateID int NOT NULL IDENTITY PRIMARY KEY,
Anno int NOT NULL,
Mese int NOT NULL,
Giorno int NOT NULL,
Ora int NOT NULL,
Minuti int NOT NULL
);
GO
INSERT dbo.myDates VALUES(1971, 6, 12, 12, 5);
INSERT dbo.myDates VALUES(2006, 5, 11, 15, 2);
INSERT dbo.myDates VALUES(1943, 11, 3, 8, 32);
GO
WITH myCTE (myDate) AS
(
SELECT
CAST(Anno AS char(4)) + -- Anno
RIGHT('00' + CAST(Mese AS varchar(2)), 2) + -- Mese
RIGHT('00' + CAST(Giorno AS varchar(2)), 2) + ' ' + -- Giorno
RIGHT('00' + CAST(Ora AS varchar(2)), 2) + ':' + -- Ora
RIGHT('00' + CAST(Minuti AS varchar(2)), 2) -- Minuti
FROM dbo.myDates
)
SELECT
myDate
, CAST(myDate AS smalldatetime) AS mySmalldatetime
, DATEDIFF(day, myDate, CURRENT_TIMESTAMP) AS DiffDays
FROM myCTE;
GO
/* Output:
myDate mySmalldatetime DiffDays
-------------- ----------------------- -----------
19710612 12:05 1971-06-12 12:05:00 12752
20060511 15:02 2006-05-11 15:02:00 0
19431103 08:32 1943-11-03 08:32:00 22835
(3 row(s) affected)
*/
DROP TABLE dbo.myDates;
Come puoi vedere ho definito per comodità una Common Table Expression (CTE) in SQL Server 2005 (sostituibile se vuoi con una vista) dove concateno le colonne in una stringa nel formato 'YYYYMMDD hh:mm'.
Questa stringa verrà implicitamente castata a datetime ogni volta che tenterai di eseguire un calcolo (come ad esempio applicando la funzione DATEDIFF()).
Per ulteriori dettagli consulta i Books Online.
>Grazie
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org