Cómo corregir & lsquo; Error de conversión al convertir la fecha y / o la hora de una cadena de caracteres & rsquo; ¿Error?

Hay muchos casos en los que las fechas y las horas no aparecen en el formato que desea, ni el resultado de una consulta se ajusta a las necesidades de los espectadores. Existen varias funciones integradas de SQL Server para formatear la cadena de fecha según sus necesidades, pero para que la cadena sea interpretada por SQL Server y para evitar errores de conversión, debe estar en un formato adecuado. Cuando intentamos convertir la fecha o la hora de una cadena de caracteres, a veces surge un error. "La conversión falló al convertir la fecha y / o la hora de la cadena de caracteres".

error de conversión de fecha y hora

El error mencionado anteriormente normalmente surge cuando el literal de fecha no es apropiado y no se puede convertir de la cadena en DateTime o date. Este error se debe a una serie de razones, que analizaremos en detalle junto con el conjunto de soluciones.

Ejemplo 1:

Reino Unido La notación de fecha y hora muestra la fecha usando el formato día-mes-año (10 de enero de 2015 o 1/10/2015) que podemos lograr usando la función "convertir" incorporada de SQL Server con estilo de formato 103.

Aquí, en el siguiente ejemplo, podemos ver que la cadena de fecha proporcionada tiene un formato incorrecto. Primero, proporciona el mes, luego los días y el último año, lo cual es incorrecto y SQL Server no puede interpretarlo, lo que genera un error. El formato correcto para la conversión de fecha al estilo del Reino Unido utilizando el estilo de fecha "103" es "dd / mm / aaaa".

Formato erróneo:

Declare @date_time_value varchar (100) = '10 / 16/2015 21:02:04 'seleccione CONVERT (datetime2, @date_time_value, 103) como UK_Date_Time_Style

Formato correcto:

El formato de fecha británico y francés es 103 = "dd / mm / aaaa" o 3 = "dd / mm / aa". Aquí 103 y 3 son estilos de fecha.

Declare @date_time_value varchar (100) = '10 / 1/15 21:02:04 'seleccione CONVERT (datetime2, @date_time_value, 103) como Date_Time_Style
Declare @date_time_value varchar (100) = '10 / 1/15 21:02:04 'seleccione CONVERT (datetime2, @date_time_value, 3) como UK_Date_Time_Style

Ejemplo 2:

A veces, la conversión de cadena a fecha en el servidor SQL da como resultado un error, no debido a los formatos de fecha u hora utilizados, sino porque está intentando almacenar información incorrecta que no es aceptable para el esquema.

Fecha equivocada:

La razón del siguiente error es simplemente que en el año 2019 no existe una fecha como “29 de febrero” porque no es un año bisiesto.

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

Corriga uno:

Declare @date_time_value varchar (100) = '2019-02-28 21:02:04' seleccione cast (@date_time_value como datetime2) como date_time_value

Formato de fecha ISO 8601:

Aunque existen numerosos formatos disponibles para manipular los valores de fecha, cuando se trabaja para una masa global / internacional, puede ser un problema de usabilidad elegir una representación de fecha y hora. Por lo tanto, se deben evitar los literales de fecha / hora específicos de la cultura. Si consideramos esta fecha “08/03/2018”, se interpretará de diferentes maneras en diferentes regiones del mundo.

  • En el estilo del Reino Unido, se interpreta como "8 de marzo de 2018".
  • En estilo europeo se interpreta como "3 de agosto de 2018"

Afortunadamente, existe una alternativa en el formato de fecha internacional desarrollado por ISO. El formato estándar mundial ISO 8601 “AAAA-MM-DDThh: mm: ss” es una opción más independiente del idioma para los literales de cadena y aborda todos estos problemas. Mientras que "aaaa" es el año, "mm" es el mes y "dd" es el día. Por lo tanto, la fecha "8 de marzo de 2018" en formato ISO internacional se escribe como "2018-03-08". Por tanto, el formato ISO es la mejor opción para la representación de fechas.

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

Recomendaciones:

Con suerte, este artículo ayudará a aliviar la confusión que he visto con frecuencia en la comunidad sobre los valores de fecha y hora. Sin embargo, se recomienda que nunca almacene las fechas en tipo de texto (varchar, char, nvarchar, nchar o text). Siempre almacene el valor de la fecha en las columnas de tipo DATE, DATETIME y preferiblemente DATETIME2 (proporciona más precisión) y deje el formato de información de fecha a la capa de interfaz de usuario en lugar de recuperarse de la base de datos.