Com es pot solucionar l'error 'Error de conversió en convertir la data i / o l'hora de la cadena de caràcters'?



Proveu El Nostre Instrument Per Eliminar Problemes

Hi ha molts casos en què les dates i les hores no apareixen en el format que desitgeu, ni una sortida de consulta s’ajusta a les necessitats dels espectadors. Hi ha diverses funcions integrades de SQL Server per formatar la cadena de dates segons la vostra necessitat, però perquè SQL Server interpreti la cadena i per evitar errors de conversió, hauria de tenir un format adequat. Quan intentem convertir la data o l'hora de la cadena de caràcters, de vegades es produeix un error. 'La conversió ha fallat en convertir la data i / o l'hora de la cadena de caràcters.'



error de conversió de data i hora

Figura 1: Error de conversió de data i / o hora de la cadena de caràcters



L'error esmentat anteriorment normalment es produeix quan el literal de data no és adequat i no es pot convertir de la cadena a Data o Hora o data. Aquest error es deu a diversos motius, que analitzarem detalladament juntament amb el conjunt de solucions.



Exemple 1:

Regne Unit La notació de data i hora mostra la data amb el format dia-mes-any (10 de gener de 2015 o 1/10/2015) que podem aconseguir mitjançant la funció de conversió de la característica SQL Server built_in amb l'estil de format 103.

Aquí, a l'exemple següent, podem veure que la cadena de dates proporcionada té un format incorrecte. En primer lloc, proporciona el mes, després els dies i l'any passat, que és incorrecte i SQL Server no pot interpretar el que resulta en un error. El format correcte per a la conversió de data a l’estil britànic mitjançant l’estil de data “103” és “dd / mm / aaaa”.

Format incorrecte:

Declara @date_time_value varchar (100) = '10 / 16/2015 21:02:04 'selecciona CONVERT (datetime2, @date_time_value, 103) com a UK_Date_Time_Style

Figura 2: Format de data incorrecte que provoca un error



Format correcte:

El format de data britànic i francès és 103 = 'dd / mm / aaaa' o 3 = 'dd / mm / aa'. Aquí 103 i 3 són estils de dates.

Declareu @date_time_value varchar (100) = '10 / 1/15 21:02:04 'seleccioneu CONVERT (datetime2, @date_time_value, 103) com a Date_Time_Style

Figura 3: Format de data correcte amb l'estil de data britànic / francès 'dd / mm / aaaa'

Declara @date_time_value varchar (100) = '10 / 1/15 21:02:04 'selecciona CONVERT (datetime2, @date_time_value, 3) com UK_Date_Time_Style

Figura 4: Format de data correcte amb l'estil de data britànic / francès 'dd / mm / aa'

Exemple 2:

De vegades, la conversió de cadenes a dates al servidor SQL provoca errors, no pel format de data o hora utilitzat, sinó pel fet que intenteu emmagatzemar informació incorrecta que l’esquema no accepta.

Data incorrecta:

El motiu de l’error següent és el simple fet que l’any 2019 no hi ha cap data com ara el '29 de febrer' perquè no és un any de traspàs.

Declara @date_time_value varchar (100) = '29-02-2019 21:02:04' selecciona emetre (@date_time_value com a data2) com data_time_value

Figura 5: Error generat ja que el 2019 no és un any de traspàs, de manera que no té el 29 de febrer com a data

Un correcte:

Declareu @date_time_value varchar (100) = '28-02-2019 21:02:04' seleccioneu emetre (@date_time_value com a data2) com data_time_value

Figura 6: Data correcta

Format de data ISO 8601:

Tot i que hi ha nombrosos formats disponibles per manipular els valors de la data, quan es treballa per a una massa global / internacional, pot ser un problema d’usabilitat triar una representació de data-hora. Per tant, s’han d’evitar els literals de data / hora específics de la cultura. Si considerem aquesta data com a '03/08/2018', s'interpretarà de manera diferent en diferents regions del món.

  • A l’estil britànic s’interpreta com a '8 de març de 2018'
  • A l’estil europeu s’interpreta com a “3 d’agost de 2018”

Per sort, hi ha una alternativa en el format de data internacional desenvolupat per ISO. El format estàndard global ISO 8601 'AAAA-MM-DDThh: mm: ss' és una opció més independent del llenguatge per als literals de cadena i tracta tots aquests problemes. Mentre que 'aaaa' és l'any, 'mm' és mes i 'dd' és dia. Per tant, la data '8 de març de 2018' en format ISO internacional s'escriu com a '08-03-2018'. Per tant, el format ISO és la millor opció per a la representació de dates.

Declareu @date_time_value varchar (100) = '28-03-2019 21:02:04' seleccioneu convertir (datetime2, @ date_time_value, 126) com a [aaaa-mm-ddThh: mi: ss.mmm]

Figura 7: Format de data de la norma internacional ISO 8601

Recomanacions:

Amb sort, aquest article us ajudarà a alleujar la confusió que he vist sovint a la comunitat sobre els valors de data / hora. Tanmateix, es recomana no emmagatzemar mai les dates en tipus de text (varchar, char, nvarchar, nchar o text) Emmagatzemeu sempre el valor de la data a les columnes tipus DATE, DATETIME i preferiblement DATETIME2 (proporciona més precisió) i, deixeu el format de la informació de la data a la capa d'interfície d'usuari en lloc de recuperar-se de la base de dades.

2 minuts de lectura