Verifica date

giovedì 13 agosto 2009 - 15.00

perla0279 Profilo | Senior Member

Ciao
ho un campo nvarchar dove vengono inserite delle date manualmente :
2009/08/15 per esempio

alcune volte ricevo un errore di questo tipo quando cerco di convertirle in datetime.........
Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type datetime.

molto spesso è la sintassi della data sbaglia... per es. scrivono 2009/15/08

come faccio a:
- Intercettare questi errori in una select in modo da visualizzarti
- Evventualmente eliminarli dalla selezione con una clausola where


elena

lbenaglia Profilo | Guru

>ho un campo nvarchar dove vengono inserite delle date manualmente

Ciao Elena,

Questo è un errore molto grave: per quale motivo non utilizzi il data type più appropriato per memorizzare le tue informazioni?
In questo modo eviteresti verifiche a posteriori dato che avverrebbe una immediata validazione del dato in fase di INSERT/UPDATE.

>come faccio a:
>- Intercettare questi errori in una select in modo da visualizzarti
>- Evventualmente eliminarli dalla selezione con una clausola
>where

Puoi provare a specificare la funzione ISDATE() nella clausola WHERE:
http://msdn.microsoft.com/it-it/library/ms187347.aspx

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

perla0279 Profilo | Senior Member

pultroppo il campo è stato settato cosi dai produttori del programma, noi siamo subentrati dopo.... quindi i campi ce li ciucciamo cosi come sono :-) :-)
e a mia opinione ce ne sono tanti di sbagliati....

adesso provo la funzione che mi hai inviato ......... speriamo che funzioni perchè ci ho messo una mattina a trovare l'errore di data tra 200000 di righe ..........

perla0279 Profilo | Senior Member


funziona ma ho una domanda........
la query funziona da database ma se la lancio da Visual Studio con reporting services mi dà un risultato completamente diverso.... come se ignorasse il isdate ()

Ha qualcuno è già capitato ????

lbenaglia Profilo | Guru

>la query funziona da database ma se la lancio da Visual Studio
>con reporting services mi dà un risultato completamente diverso....
>come se ignorasse il isdate ()
>
>Ha qualcuno è già capitato ????
Dai BOL: "The return value of ISDATE depends on the settings set by SET DATEFORMAT, SET LANGUAGE and default language option."
Sicura che queste impostazioni siano le stesse da ogni ambiente?

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

perla0279 Profilo | Senior Member

in effetti il problema era quello...
mettendo questi parametri all'inizio della query lanciata da Reporting services funziona corettamente:

SET LANGUAGE us_english;
-- Set date format to day/month/year.
SET DATEFORMAT ymd;

lbenaglia Profilo | Guru

>in effetti il problema era quello...
>mettendo questi parametri all'inizio della query lanciata da
>Reporting services funziona corettamente:
>
>SET LANGUAGE us_english;
>-- Set date format to day/month/year.
>SET DATEFORMAT ymd;

Il primo comando imposta implicitamente il formato data a mdy (lo puoi verificare eseguendo EXEC sp_helplanguage N'us_english'), mentre il secondo a ymd.
A te quale formato serve?
Più banalmente non puoi impostare la stessa lingua di default per le login che utilizzi dai diversi ambienti?

ALTER LOGIN login_name WITH DEFAULT_LANGUAGE = language;

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
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