Ir al contenido


Foto

Extraño problema de conversión de cadena a fecha


  • Por favor identifícate para responder
8 respuestas en este tema

#1 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 31 octubre 2011 - 04:40

Pues tenemos un problema sumamente extraño con MsSql server. Resulta que al estar convirtiendo en cadenas nos dimos cuenta que diferentes formatos de fecha funcionan sin problema pero que hay uno en específico, que es el más utilizado por nosotros, que genera error al intentar convertirlo.

Aquí un ejemplo de los que funcionan sin problema:

 
select cast('20111027' as datetime)   
select cast('27/10/2011' as datetime) 
select cast('27-10-2011' as datetime) 


y este me genera error de "La conversión del tipo de datos char a datetime produjo un valor datetime fuera de intervalo."

select cast('2011-10-27' as datetime) 


El collation del servidor Sql 2000 Standard es:
SQL_LATIN1_GENERAL_CP1_CI_AS.

Alguién tendrá idea de que está ocurriendo?





  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 31 octubre 2011 - 04:42

Ya probaron con:


SELECT cast('2011-27-10' AS datetime)


SaludOS
  • 0

#3 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 31 octubre 2011 - 04:47

Ya probaron con:


SELECT cast('2011-27-10' AS datetime)


SaludOS


Si amigo, de hecho esa fué la solución que le hemos dado. Pero la documentación establece que con el collation que tenemos, el formato británico deberia ser convertido sin problema.

yyyy-mm-dd

en cambio solo nos acepta el americano yyyy-dd-mm
y los que puse antes.


Muy raro  ^o|    ^o|  ^o|
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 31 octubre 2011 - 04:52

Estas usando PHP ?

Si es así modifica tu php.ini con esto

mssql.datetimeconvert = off

SaludOS
  • 0

#5 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 31 octubre 2011 - 05:02

Estas usando PHP ?

Si es así modifica tu php.ini con esto

mssql.datetimeconvert = off

SaludOS


No amigo, eso es lo peor :( lo estoy haciéndo directamente en el Sql Analizer.

y fijate que profundizando en los formatos hice pruebas con estos:

 
select cast('20112710' as datetime)
select cast('10/27/2011' as datetime)
select cast('10-27-2011' as datetime)



y me dieron el error: "La conversión del tipo de datos char a datetime produjo un valor datetime fuera de intervalo."

pero en caso contrario este si funcionó:

 
select cast('2011-27-10' as datetime)



Lo cual contrapone lo establecido en la documentación de Sql Server pára el collation con que está configurado.

y viene lo peor, tenemos un equipo con la misma configuración de  sql y allí si nos convierte el formato yyyy-mm-dd sin ningún problema.

Eso me tiene bastante intrigado. pues jamás me habia ocurrido.



  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 31 octubre 2011 - 05:06

Hola

Eso me suena que tendrá que ver con el idioma del SQL o de la maquina donde se ejecuta, esas son las cosas que ponen a uno a pensar :)

SaludOS
  • 0

#7 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 31 octubre 2011 - 05:10

Si amigo, es algo que me tiene super integrado. La instalación de Sql  es en español. la configuración regional del servidor es español México. y el collation es precisamente para estos idiomas. y Nada¡¡¡¡¡¡

Caso para el spider?
  • 0

#8 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 01 noviembre 2011 - 08:59

Hola,
Hace años que no toco MS SQL Server por lo que diré tómalo con pinzas.


¿No será que a pesar de estar instalado en español está configurado con otro formato para fechas?
Recuerda que no necesariamente una aplicación seguirá la propia configuración regional... Si el mismísimo Excel chifla si le tocas (o tocan; hay aplicaciones que intencionalmente la cambian) el moño de la configuración regional, ¿porqué no le puede suceder a  MS SQL Server?


La pregunta aquí es ¿No será por casualidad que en dicho server hay algo más instalado y trabaja con alguna otra y propia configuración regional?


En Firebird se puede definir tanto un charset y collation por defecto para toda la base de datos y luego de considerarse necesario puede "sobreescribirse" esta configuración de charset y collation para algún campo puntual. ¿Por casualidad no será que MS Server tiene algo similar y a nivel campo tienes definido otro charset y collation distinto al de por defecto?


Por ahora estos dos escenarios, y no necesariamente mutuamente excluyentes, se me ocurren.


Saludos,
  • 0

#9 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 01 noviembre 2011 - 09:57

Saludos.

¿Has probado CONVERT(datetime, '10-27-2011', 102)?
  • 0




IP.Board spam blocked by CleanTalk.