2010-05-06 23 views
30

yo probamos esteCómo convertir una cadena "dd/mm/aaaa" a fecha y hora en SQL Server?

SELECT convert(datetime, '23/07/2009', 111)

pero tiene este error

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

Sin embargo

SELECT convert(datetime, '07/23/2009', 111)

está bien aunque

¿Cómo arreglar el primero?

+0

¿Ha intentado utilizar el formato UTC 'YYYY-MM-DD' es un enfoque menos consistente y no está sujeto a las configuraciones específicas del país. – Lazarus

+0

¿Ha intentado almacenar los valores de fecha como marcas de tiempo epoch, que son mucho más fáciles de manejar que las cadenas? –

+0

El tiempo de la edad es casi inútil para las fechas posteriores a 2037, o antes de 1903 más o menos. Casi cualquier función que usa uno o trabaja con uno espera que sea un int firmado (32 bits, 31 en ambos sentidos). Si quieres usar 64 bits, te arriesgas a que los bits altos de tu fecha se corten. – cHao

Respuesta

59

El último argumento de CONVERT parece determinar el formato utilizado para el análisis. Consultar MSDN docs for CONVERT.

111 - la que está utilizando es Japón yy/mm/dd.

Supongo que el que está buscando es 103, que es dd/mm/yyyy.

lo que debe tratar:

SELECT convert(datetime, '23/07/2009', 103) 
+0

'103' es' dd/mm/aaaa' de acuerdo con [MS documentos] (https://msdn.microsoft.com/es-ES/ library/ms187928.aspx) –

7

Probar:

SELECT convert(datetime, '23/07/2009', 103) 

esto es estándar británico/francés.

0
SELECT convert(varchar(10), '23/07/2009', 111) 
+0

Por qué esto funciona – Mark

+0

Debería ser un comentario – Chinna

0

SQL Server por defecto usa el formato mdy fecha y por lo que el siguiente funciona:

SELECT convert(datetime, '07/23/2009', 111) 

y esto no funciona:

SELECT convert(datetime, '23/07/2009', 111) 

Yo mismo he tenido dificultades para llegar con una sola consulta que puede manejar ambos formatos de fecha: mdy y dmy.

Sin embargo, debe estar bien con el formato de tercera fecha: ymd.

0
SELECT convert(datetime, '23/07/2009', 103) 
Cuestiones relacionadas