Convertire integer/string in datetime

lunedì 31 maggio 2010 - 14.53

Bolo Profilo | Junior Member

Ciao!

DIspongo di anno + mese + data in formato integer; li converto tutti in string, li concateno e li trasformo in datetime.
Sulla carta funziona, ma in pratica mi da problemi quando mese e giorno non sono numeri di due cifre; potrei risolvere con degli IF, ma mi chiedevo se ci fosse una via più semplice.

DECLARE @ANNO AS INTEGER
DECLARE @MESE AS INTEGER
DECLARE @GIORNO AS INTEGER

-- CASO FUNZIONANTE

SET @ANNO = 2010
SET @MESE = 12
SET @GIORNO = 28

SELECT CAST (
CONVERT(VARCHAR, @ANNO)
+ CONVERT(VARCHAR, @MESE)
+ CONVERT(VARCHAR, @GIORNO) AS smalldatetime)

-- CASO NON FUNZIONANTE

SET @ANNO = 2010
SET @MESE = 1
SET @GIORNO = 2

SELECT CAST (
CONVERT(VARCHAR, @ANNO)
+ CONVERT(VARCHAR, @MESE)
+ CONVERT(VARCHAR, @GIORNO) AS smalldatetime)


Grazie

lbenaglia Profilo | Guru

>-- CASO NON FUNZIONANTE
>
>SET @ANNO = 2010
>SET @MESE = 1
>SET @GIORNO = 2
>
>SELECT CAST (
> CONVERT(VARCHAR, @ANNO)
> + CONVERT(VARCHAR, @MESE)
> + CONVERT(VARCHAR, @GIORNO) AS smalldatetime)

Osserva il seguente esempio:

DECLARE @ANNO int = 2010; DECLARE @MESE int = 1; DECLARE @GIORNO int = 2; SELECT CAST( CAST(@ANNO AS varchar(4)) + RIGHT('00' + CAST(@MESE AS varchar(2)), 2) + RIGHT('00' + CAST(@GIORNO AS varchar(2)), 2) AS date) AS Data; /* Output: Data ---------- 2010-01-02 (1 row(s) affected) */

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Bolo Profilo | Junior Member

Geniale, semplice ed efficace, come sempre. Risolto, grazie!

ps. per curiosità, un software diverso da SQL server che incollando il codice mi da errore?

lbenaglia Profilo | Guru

>ps. per curiosità, un software diverso da SQL server che incollando
>il codice mi da errore?
Eh?!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Bolo Profilo | Junior Member

DECLARE @ANNO int = 2010;
DECLARE @MESE int = 1;
DECLARE @GIORNO int = 2;

SELECT CAST(
CAST(@ANNO AS varchar(4)) +
RIGHT('00' + CAST(@MESE AS varchar(2)), 2) +
RIGHT('00' + CAST(@GIORNO AS varchar(2)), 2)
AS date) AS Data;

/* Output:

Data
----------
2010-01-02

(1 row(s) affected)

*/



Dà questi errori:

Msg 139, Level 15, State 1, Line 0
Impossibile assegnare un valore predefinito a una variabile locale.
Msg 139, Level 15, State 1, Line 0
Impossibile assegnare un valore predefinito a una variabile locale.
Msg 139, Level 15, State 1, Line 0
Impossibile assegnare un valore predefinito a una variabile locale.
Msg 137, Level 15, State 2, Line 6
Dichiarare la variabile scalare "@ANNO".

lbenaglia Profilo | Guru

>Dà questi errori:
>
>Msg 139, Level 15, State 1, Line 0
>Impossibile assegnare un valore predefinito a una variabile locale.
>Msg 139, Level 15, State 1, Line 0
>Impossibile assegnare un valore predefinito a una variabile locale.
>Msg 139, Level 15, State 1, Line 0
>Impossibile assegnare un valore predefinito a una variabile locale.
>Msg 137, Level 15, State 2, Line 6
>Dichiarare la variabile scalare "@ANNO".

La possibilità di valorizzare direttamente una variabile durante la sua dichiarazione è stata introdotta con SQL Server 2008.
Probabilmente tu utilizzi una versione precedente.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Bolo Profilo | Junior Member

Ah ok, infatti ho il 2005... Tutto chiaro...

Buona serata!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5