SQL Server admite muchos formatos: consulte los libros en línea de MSDN sobre CAST y CONVERT . La mayoría de esos formatos dependen de la configuración que tenga, por lo tanto, esta configuración puede funcionar algunas veces, y otras no.
La forma de resolver esto es usar el formato de fecha ISO-8601 (ligeramente adaptado) que es compatible con SQL Server; este formato funciona siempre , independientemente de la configuración de formato de fecha y lenguaje de SQL Server.
El formato ISO-8601 es compatible con SQL Server y viene en dos tipos:
YYYYMMDD
solo para fechas (sin porción de tiempo); nota aquí: sin guiones! , eso es muy importante! YYYY-MM-DD
¡ NO es independiente de la configuración de formato de fecha en su SQL Server y NO funcionará en todas las situaciones!
o:
YYYY-MM-DDTHH:MM:SS
para fechas y horas - tenga en cuenta aquí: este formato tiene guiones (pero se pueden omitir), y se fija T
como delimitador entre la porción de fecha y hora de su DATETIME
.
Esto es válido para SQL Server 2000 y versiones posteriores.
Entonces, en su caso concreto, use estas cadenas:
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
y debe estar bien (nota: debe usar el formato internacional de 24 horas en lugar del formato AM / PM de 12 horas para esto).
Alternativamente : si está usando SQL Server 2008 o más reciente, también podría usar el DATETIME2
tipo de datos (en lugar de simple DATETIME
) y su actual INSERT
simplemente funcionaría sin ningún problema. :-) DATETIME2
es mucho mejor y mucho menos exigente con las conversiones, y de todos modos son los tipos de datos de fecha / hora recomendados para SQL Server 2008 o más nuevos.
SELECT
CAST('02-21-2012 6:10:00 PM' AS DATETIME2), -- works just fine
CAST('01-01-2012 12:00:00 AM' AS DATETIME2) -- works just fine
No me preguntes por qué todo este tema es tan complicado y algo confuso, así es como es. Pero con el YYYYMMDD
formato, debería estar bien para cualquier versión de SQL Server y para cualquier configuración de idioma y formato de fecha en su SQL Server.