Estaba tratando de crear una tabla de la siguiente manera,
create table table1(date1 datetime,date2 datetime);
Primero intenté insertar valores como a continuación,
insert into table1 values('21-02-2012 6:10:00 PM','01-01-2001 12:00:00 AM');
Ha dado un error diciendo:
No se puede convertir varchar a datetime
Luego probé el siguiente formato como una de las publicaciones sugeridas por nuestro stackoverflow,
insert into table1 values(convert(datetime,'21-02-2012 6:10:00 PM',5)
,convert(datetime,'01-01-2001 12:00:00 AM',5));
Pero sigo recibiendo el error que dice:
La conversión falló al convertir la fecha y / o la hora de la cadena de caracteres
¿Alguna sugerencia?
sql
sql-server
Mari
fuente
fuente
Respuestas:
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 fijaT
como delimitador entre la porción de fecha y hora de suDATETIME
.Esto es válido para SQL Server 2000 y versiones posteriores.
Entonces, en su caso concreto, use estas cadenas:
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 simpleDATETIME
) y su actualINSERT
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.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.fuente
La conversión en el servidor SQL falla a veces no debido a los formatos de fecha u hora utilizados, es simplemente porque está tratando de almacenar datos incorrectos que no son aceptables para el sistema.
Ejemplo:
Create Table MyTable (MyDate);
Insert Into MyTable(MyDate) Values ('2015-02-29');
El servidor SQL arrojará el siguiente error:
Conversion failed when converting date and/or time from character string.
La razón de este error es simplemente que no existe dicha fecha (29 de febrero) en el año (2015).
fuente
Respuesta simple: 5 es italiano "aa" y 105 es italiano "aaaa". Por lo tanto:
funcionará correctamente, pero
Dará error.
Igualmente,
dará error, donde como
trabajará.
fuente
Simplemente actualice el formato de fecha como abajo
Me resuelve el problema y funciona bien
fuente
DATEFORMAT
configuración de su sesión . Verifique esto ejecutandoSET DATEFORMAT MDY;SELECT CAST('2017-08-07 00:00:00' AS datetime); SET DATEFORMAT DMY;SELECT CAST('2017-08-07 00:00:00' AS datetime);
. Funcionará de manera confiable si agrega unT
separador (yyyy-MM-ddTHH:mm:ss
).Siempre que sea posible, se deben evitar los literales de fecha / hora específicos de la cultura .
Hay algunos formatos seguros para proporcionar una fecha / hora como literal:
Todos los ejemplos para
2016-09-15 17:30:00
ODBC (mi favorito, ya que se maneja como el tipo real de inmediato)
{ts'2016-09-15 17:30:00'}
- Sello de tiempo{d'2016-09-15'}
- Solo fecha{t'17:30:00'}
--Tiempo soloISO8601 (el mejor para todas partes )
'2016-09-15T17:30:00'
--¡Ten cuidado con lo que hayT
en el medio!Sin separar (pequeño riesgo de malinterpretarse como número)
'20160915'
--solo para cita puraEs bueno tener en cuenta: las fechas inválidas tienden a aparecer con errores extraños
Una razón más para los extraños errores de conversión: ¡Orden de ejecución!
SQL-Server sabe hacer cosas en un orden de ejecución que uno no podría haber esperado. Su declaración escrita parece que la conversión se realiza antes de que tenga lugar alguna acción relacionada con el tipo, pero el motor decide, por qué, hacer la conversión en un paso posterior.
Aquí hay un gran artículo que explica esto con ejemplos: Rusano.com: "t-sql-functions-do-no-implica-un-cierto-orden-de-ejecución" y aquí está la pregunta relacionada .
fuente
la mejor manera es este código
fuente
fuente
El formato de fecha y hora que realmente se ejecuta en el servidor SQL es
fuente
m
yM
). Lea el comentario de Dan Guzman a la respuesta de Pronab Roy. Y lea las otras respuestas aquí ...Por favor intente esto.
SQL Server espera fechas en formato MM / DD / AAAA, si el inglés está configurado como su idioma predeterminado. Aquí estoy guardando el valor de selector de fecha en la base de datos sql2008. Mi tipo de campo es fecha y hora en la base de datos.dpdob es mi nombre de selector de fecha.
Ahora use dob en su consulta de inserción.
fuente
Puedes probar este código
fuente
Tuve este problema al intentar concatenar
getdate()
en una cadena que estaba insertando en un campo nvarchar.Hice un casting para evitarlo:
Ese es un ejemplo desinfectado. La parte clave de eso es:
...' + CAST(CAST(getdate() AS datetime2) AS nvarchar) + '...
Lanzó la fecha como
datetime2
, luegonvarchar
para concatenarla.fuente
Estoy intentando esto y está trabajando conmigo:
fuente
establecer Cultura en inglés desde el archivo web.config
por ejemplo, si configuras la cultura en árabe, el tiempo será
22/09/2017 02:16:57 ص
y obtiene el error: la conversión falló al convertir la fecha y / o la hora de la cadena de caracteres al insertar datetime
fuente
Así es cómo convertir fácilmente de una cadena ISO a un servidor SQL
datetime
:Fuente https://www.sqlservercurry.com/2010/04/convert-character-string-iso-date-to.html
fuente
Para mí esto funcionó:
fuente