Come risolvere & lsquo; Conversione non riuscita durante la conversione di data e / o ora dalla stringa di caratteri & rsquo; Errore?

Ci sono molti casi in cui le date e gli orari non vengono visualizzati nel formato desiderato, né l'output di una query si adatta alle esigenze dei visualizzatori. Esistono diverse funzionalità incorporate di SQL Server per formattare la stringa della data in base alle proprie necessità, ma affinché la stringa venga interpretata da SQL Server e per evitare errori di conversione dovrebbe essere in un formato appropriato. Quando proviamo a convertire la data o l'ora dalla stringa di caratteri, a volte si verifica un errore. "Conversione non riuscita durante la conversione della data e / o dell'ora dalla stringa di caratteri."

errore di conversione di data e ora

L'errore sopra menzionato si verifica normalmente quando il valore letterale della data non è corretto e non può essere convertito dalla stringa in DateTime o date. Questo errore è dovuto a una serie di motivi, che discuteremo in dettaglio insieme alla soluzione impostata.

Esempio 1:

Regno Unito La notazione di data e ora visualizza la data utilizzando il formato giorno-mese-anno (10 gennaio 2015 o 10/1/2015) che possiamo ottenere utilizzando la funzione "convert" di SQL Server incorporata con stile di formattazione 103.

Nell'esempio seguente possiamo vedere che la stringa della data fornita è nel formato sbagliato. Innanzitutto, fornisce il mese, quindi i giorni e l'ultimo anno che è sbagliato e non può essere interpretato da SQL Server, il che si traduce in un errore. Il formato corretto per la conversione della data nello stile del Regno Unito utilizzando lo stile della data "103" è "gg / mm / aaaa".

Formato errato:

Dichiarare @date_time_value varchar (100) = '10 / 16/2015 21:02:04 'selezionare CONVERT (datetime2, @date_time_value, 103) come UK_Date_Time_Style

Formato corretto:

Il formato della data britannico e francese è 103 = "dd / mm / yyyy" o 3 = "dd / mm / yy". Qui 103 e 3 sono gli stili di data.

Dichiara @date_time_value varchar (100) = '10 / 1/15 21:02:04 'seleziona CONVERT (datetime2, @date_time_value, 103) come Date_Time_Style
Dichiara @date_time_value varchar (100) = '10 / 1/15 21:02:04 'seleziona CONVERT (datetime2, @date_time_value, 3) come UK_Date_Time_Style

Esempio 2:

A volte la conversione da stringa a data nel server SQL genera un errore, non a causa dei formati di data o ora utilizzati, ma piuttosto perché stai tentando di memorizzare informazioni errate che non sono accettabili per lo schema.

Data errata:

Il motivo del seguente errore è semplicemente che nell'anno 2019 non esiste una data come "29 febbraio" perché non è un anno bisestile.

Declare @date_time_value varchar (100) = '2019-02-29 21:02:04' select cast (@date_time_value as datetime2) as date_time_value

Quello corretto:

Declare @date_time_value varchar (100) = '2019-02-28 21:02:04' seleziona cast (@date_time_value as datetime2) come date_time_value

Formato data ISO 8601:

Sebbene siano disponibili numerosi formati per manipolare i valori di data, quando si lavora per una massa globale / internazionale, può essere un problema di usabilità scegliere una rappresentazione datetime. Quindi i valori letterali data / ora specifici delle impostazioni cultura dovrebbero essere evitati. Se consideriamo questa data “03/08/2018”, sarà interpretata in modo diverso nelle diverse regioni del mondo.

  • Nello stile britannico viene interpretato come "8 marzo 2018"
  • In stile europeo è interpretato come "3 agosto 2018"

Fortunatamente, esiste un'alternativa nel formato di data internazionale sviluppato da ISO. Il formato standard globale ISO 8601 "AAAA-MM-GGThh: mm: ss" è un'opzione più indipendente dalla lingua per le stringhe letterali e risolve tutti questi problemi. Mentre "yyyy" è l'anno, "mm" è il mese e "dd" è il giorno. Quindi la data "8 marzo 2018" in formato ISO internazionale è scritta come "2018-03-08". Pertanto il formato ISO è la scelta migliore per la rappresentazione della data.

Declare @date_time_value varchar (100) = '2019-03-28 21:02:04' select convert (datetime2, @ date_time_value, 126) as [yyyy-mm-ddThh: mi: ss.mmm]

Raccomandazioni:

Si spera che questo articolo aiuti ad alleviare la confusione che ho spesso visto nella comunità sui valori di data / ora. Tuttavia, si consiglia di non memorizzare mai le date in colonne di tipo testo (varchar, char, nvarchar, nchar o text) Memorizzare sempre il valore della data in DATE, DATETIME e preferibilmente DATETIME2 (fornisce maggiore precisione) e lasciare la formattazione delle informazioni sulla data al livello dell'interfaccia utente invece di essere recuperati dal database.

Raccomandato

Correzione: Minecraft non rispondeva
Che cos'è l'applicazione di registrazione del dispositivo del sintonizzatore TV digitale e deve essere rimossa?
Cos'è FileRepMalware e dovresti rimuoverlo