Cnversione VARCHAR-DATIME

giovedì 01 ottobre 2009 - 14.53

_jack_ Profilo | Junior Member

Ciao a tutti,

con SQL Server 2000 sto cercando di fare una stored procedure tra le altre cose mi importi dei dati da un host esterno.
Eseguendo una query (select) come valore di un campo ho una data formattata nel seguente modo 'YYYYMMDD'.
A me servirebbe formattarla in 'DD-MM-YYYY' per poterla inserire nel mio DB con una INSERT.

Qualche idea?

Grazie
J

alx_81 Profilo | Guru

>Ciao a tutti,
Ciao

>con SQL Server 2000 sto cercando di fare una stored procedure
>tra le altre cose mi importi dei dati da un host esterno.
>Eseguendo una query (select) come valore di un campo ho una data
>formattata nel seguente modo 'YYYYMMDD'.
Quella forma e' già in ISO, non ti serve nessuna conversione. Sicuro che ti arrivi una stringa e non una data già tipizzata?

>Grazie
di nulla!

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

_jack_ Profilo | Junior Member

esatto è già in ISO ;
il problema è quando cerco di fare una Insert (ovviamente in un campo data):

Server: messaggio 8115, livello 16, stato 2, riga 23
Si è verificato un errore di overflow aritmetico durante la conversione del tipo di dati da expression a datetime.


Grazie ancora..
J

alx_81 Profilo | Guru

>esatto è già in ISO ;
>il problema è quando cerco di fare una Insert (ovviamente in
>un campo data):
come fai la insert?
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

_jack_ Profilo | Junior Member

è un po complicato......

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

praticamente faccio una insert di una tabella che leggo da un server collegato...

alx_81 Profilo | Guru

>è un po complicato......
due cose:

1) di che tipo e' ad host il campo_data?
2) perche' non definisci i campi nella corretta posizione? Tipo:

INSERT INTO tabella (campo1, campo2, campo_data) SELECT...

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

_jack_ Profilo | Junior Member


>due cose:
>1) di che tipo e' ad host il campo_data?
l'host è un AS400 quindi non te lo saprei dire esattamente...però dovrebbe essere formattato come data..


>2) perche' non definisci i campi nella corretta posizione? Tipo:
non lo faccio solamente per risparmiare spazio ma è la stessa cosa...

alx_81 Profilo | Guru

>non lo faccio solamente per risparmiare spazio ma è la stessa cosa...
hai provato? non vorrei che fosse un problema di posizioni, anche perche' la insert con un ISO string funziona:

USE tempdb; CREATE TABLE TempTable ( IDRecord int IDENTITY(1, 1) NOT NULL PRIMARY KEY , DataOggi datetime NOT NULL ) GO INSERT INTO TempTable (DataOggi) SELECT '20091001' SELECT DataOggi FROM TempTable DROP TABLE TempTable GO

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

_jack_ Profilo | Junior Member


>hai provato? non vorrei che fosse un problema di posizioni, anche
>perche' la insert con un ISO string funziona:
provato con un tabella con un solo campo Datetime...medesimo risultato



>INSERT INTO TempTable (DataOggi)
>SELECT '20091001'
così facendo funziona...avevo già provato, per questo chiedevo come formattarla, per trattarla come un dato "sporco"...

alx_81 Profilo | Guru

>così facendo funziona...avevo già provato, per questo chiedevo
>come formattarla, per trattarla come un dato "sporco"...
prova con
SELECT @TSQL = 'SELECT CAMPO1,CAMPO2,CAMPO3,CAST(CAMPO_DATA as DATETIME) FROM OPENQUERY(HOST,''SELECT * FROM TABELLA WHERE CAMPO7 = 9 OR CAMPO7 = 5 AND CAMPO9= ''''' + @VARIABILE + ''''''')'


--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

_jack_ Profilo | Junior Member

>>così facendo funziona...avevo già provato, per questo chiedevo
>>come formattarla, per trattarla come un dato "sporco"...
>prova con
>SELECT @TSQL = 'SELECT CAMPO1,CAMPO2,CAMPO3,CAST(CAMPO_DATA
>as DATETIME) FROM OPENQUERY(HOST,''SELECT * FROM TABELLA WHERE
>CAMPO7 = 9 OR CAMPO7 = 5 AND CAMPO9= ''''' + @VARIABILE + ''''''')'

ho capito il perchè....probabilmente funziona anche così: il problema è che era un formato numerico (non lo sapevo ) quindi una conversione diretta risultava impossibile;
ho risolto facendo

Convert(DATETIME,Convert(VARCHAR,CAMPO_DATA))

Grazie a tutti comunque..

alx_81 Profilo | Guru

>ho capito il perchè....probabilmente funziona anche così: il
>problema è che era un formato numerico (non lo sapevo ) quindi
>una conversione diretta risultava impossibile;
ragione per cui ti chiedevo quale fosse il data type del campo su host.
Meglio così,
ciao!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
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