Convertire data

mercoledì 30 maggio 2012 - 12.56

saritron Profilo | Newbie

Buongiorno a tutti, vi chiedo aiuto per un problema che mi sta mettendo un po' in difficoltà.
devo convertire un dato di tipo char a datetime che contiene una data di questo tipo: 01JAN2012:05:01:28.
la soluzione che ho trovato è select convert (datetime,'01JAN2012:05:01:28',113), il problema che come vedete il mese è in inglese per cui se fosse
select convert (datetime,'05gen2012 12:19:41.797',113) potrebeb digerirlo.
A parte il parsing per trasformare il mese in un equivalente italiano(cosa abbastanza poco elegante) avete una soluzione?

alx_81 Profilo | Guru

>Buongiorno a tutti, vi chiedo aiuto per un problema che mi sta
>mettendo un po' in difficoltà.
ciao e benvenuto in dotnethell.it!

>devo convertire un dato di tipo char a datetime che contiene
>una data di questo tipo: 01JAN2012:05:01:28.
>la soluzione che ho trovato è select convert (datetime,'01JAN2012:05:01:28',113),
>il problema che come vedete il mese è in inglese per cui se fosse
>select convert (datetime,'05gen2012 12:19:41.797',113) potrebeb digerirlo.
il fatto che la tua data sia in char con un formato non ISO ti rende la cosa "sporca".
Ma quel char ti arriva da una sorgente non gestita da te? Se così fosse non vedo molte alternative a fare parsing del campo (magari una funzione scalare) andando a tagliare i pezzi di stringa per ottenere una data valida. Altrimenti, cerca di convertire il campo char in datetime proprio sulla base dati (ovviamente se non arriva da txt o esterno) per usare il corretto data type.

>A parte il parsing per trasformare il mese in un equivalente
>italiano(cosa abbastanza poco elegante) avete una soluzione?
eheh, hai un char.. non sei sicuro che ti arrivi corretto sempre, quindi, non ne vedo. Non mi metterei a lavorare di SET LANGUAGE.

ciao
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

saritron Profilo | Newbie

Grazie del benvenuto...
Innanzi tutto si parte da un file che mi viene dato che contiene una serie di dati tra cui questa data, la incorporo su una tabella che metto in formato varchar e po mi lavoro successivamente.
siccome la data nel mio sistema è in formato datetime , al massimo una conversione in char della stessa devo aggregare le linee tra le altre cose per giorno e quindi devo convertire la la data, la soluzione "grezza" è quella di ricostruire la data convertendo la il mese ma volevo sapere se esisteva una soluzione più elegante.
Dimenticavo il db è sql server 2000(lo so è vecchissimo ma io non li do i soldi per comprarne un'altro :-) )

lbenaglia Profilo | Guru

>Non mi metterei a lavorare di SET LANGUAGE.
E perché no?
Si potrebbe definire una sp che esegue l'importazione che come prima istruzione imposti appunto la lingua in inglese. Soluzione semplice e non invasiva.

Ciao!
--
Lorenzo Benaglia
http://blogs.dotnethell.it/lorenzo/

alx_81 Profilo | Guru

>>Non mi metterei a lavorare di SET LANGUAGE.
>E perché no?
>Si potrebbe definire una sp che esegue l'importazione che come
>prima istruzione imposti appunto la lingua in inglese. Soluzione
>semplice e non invasiva.
il problema è che il parsing lo devi fare comunque con quel formato sorgente, no?
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

lbenaglia Profilo | Guru

>il problema è che il parsing lo devi fare comunque con quel formato
>sorgente, no?

Direi di no:

SET LANGUAGE us_english; SELECT CONVERT(datetime, '01JAN2012 05:01:28', 113) AS Data; /* Output: Data ----------------------- 2012-01-01 05:01:28.000 (1 row(s) affected) */

Nel caso ci siano i ":" tra data e ora (ma credo sia un refuso) è sufficiente dare una aggiustatina

SET LANGUAGE us_english; SELECT CONVERT(datetime, STUFF('01JAN2012:05:01:28', 10, 1, ' ') , 113) AS Data; /* Output: Data ----------------------- 2012-01-01 05:01:28.000 (1 row(s) affected) */

Ciao!
--
Lorenzo Benaglia
http://blogs.dotnethell.it/lorenzo/

saritron Profilo | Newbie

ad un primo controllo funziona veramente notevole, grazie era questa la strada che cercavo vi farò sapere volevo solo sapere: set language "switcha" nell'altro liguaggio per sempre il DB oppure solo la determinata query?

lbenaglia Profilo | Guru

>ad un primo controllo funziona veramente notevole, grazie era
>questa la strada che cercavo vi farò sapere volevo solo sapere:
>set language "switcha" nell'altro liguaggio per sempre il DB
>oppure solo la determinata query?
Per una determinata sessione.

Ciao!
--
Lorenzo Benaglia
http://blogs.dotnethell.it/lorenzo/

alx_81 Profilo | Guru

>Nel caso ci siano i ":" tra data e ora (ma credo che sia un refuso)
>è sufficiente dare una aggiunstatina
ok, grazie mille Lorenzo
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

saritron Profilo | Newbie

Tutto ok funziona, per lorenzo, non era un refuso avevo i dati proprio come avevo scritto grazie a tutti
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5