Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Duda con convert a datetime

Estas en el tema de Duda con convert a datetime en el foro de SQL Server en Foros del Web. Que tal, molestando de nuevo y esta vez si no se que pasa, tego una tabla que contiene 5 mil registro, hay un campo VALOR ...
  #1 (permalink)  
Antiguo 16/04/2009, 14:28
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 19 años, 1 mes
Puntos: 3
Pregunta Duda con convert a datetime

Que tal, molestando de nuevo y esta vez si no se que pasa, tego una tabla que contiene 5 mil registro, hay un campo VALOR donde se capturan fechas , este campo no lo puedo psar a tipo FECHA por que es un campo donde capturo diferente tipo de valores, y bueno cuando ejecuto e siguiente query:

Código PHP:
select from doc_valores where campo_a='REGISTRO' and convert(datetime,valor,103) > convert(datetime,'15/04/2009',103
me marca un error al tratar de convertir un una cadena a fecha, antes de marcar el error me muestra bien un primer dato de 16 posibles q se q hay, pero ya en el segundo dato imagino que marca el error pero no se por que, los datos en el campo VALOR estan con este formato '15/04/2009' y valido q no tome encuenta ni espacios ni valores en blanco, sin embargo cuadno ejecuto ese query en otra bd con solo 4 registros si me lo ejecuta bien, alguna idea de por q me marca el error, se lo agradeceria mucho!!
__________________
Wow! No se que decir...
  #2 (permalink)  
Antiguo 16/04/2009, 14:43
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 4 meses
Puntos: 220
Respuesta: Duda con convert a datetime

Cita:
Iniciado por iislas Ver Mensaje
Para evitarse dolores de cabeza y sus conversiones, ya lo hemos sugerido aqui, utilicen siempre formato ANSI-SQL.

yyyymmdd hh:mm:ss, nnn
como dice debes utilizar formato como esto ya q es mejor al momento de evaluarlos trata de trabajar con estos tipos de formatos de fechas

utilizalo de la siguiente manera

Código PHP:
select from doc_valores where campo_a='REGISTRO' and convert(varchar,valor,112) > '20090415' 
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 16/04/2009, 15:04
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 19 años, 1 mes
Puntos: 3
Respuesta: Duda con convert a datetime

Pues gracias por la respuesta, pero en esta oacación me genera el mismo problema, no creo que la complicación sea el tipo del formato, si no los datos en si pero no se como es que se llega a generar el error cuando en teoria el dato a convertir a fecha existe, es correcto y sin espacios ni nada :s que mas podria ser?
__________________
Wow! No se que decir...
  #4 (permalink)  
Antiguo 16/04/2009, 19:25
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: Duda con convert a datetime

Para validar que es una fecha, SELECT ISDATE(tucampo)........
  #5 (permalink)  
Antiguo 20/04/2009, 14:33
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 19 años, 1 mes
Puntos: 3
Respuesta: Duda con convert a datetime

Que tal de nvo molestando, pues por mas formas distintas que uso no me funciona mi query que es:

Código PHP:
select from doc_catalogo_valores where isdate(valor)=1
and cve_docto like '%00.123' 
and  convert(datetime,CONVERT(VARCHAR,[valor],101)) = convert(datetime,CONVERT(VARCHAR,'14/04/2009',101)) 
Ese query tal qual esta solo me devuelve un valor si le comentara la parte de la comparacion entre fechas lo cual es correcto, pero cuando le dejo la validacion de las fechas me marca un error de :

Código PHP:
Conversion failed when converting datetime from character string
me preguntaba si en la configuracion del sql hay algo referete a las fechas que podria afectar mi query :S

o por que la comparacion de fechas me marca el error si hasta verifico que VALOR sea una fecha?
__________________
Wow! No se que decir...
  #6 (permalink)  
Antiguo 20/04/2009, 18:32
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: Duda con convert a datetime

Nota: Si haces CONVERT sobre tu columna fecha, no se utilizaran los indices, tomalo en cuenta

WHERE CONVERT(CHAR(8), valor, 112) = '20090414'
  #7 (permalink)  
Antiguo 21/04/2009, 14:24
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 19 años, 1 mes
Puntos: 3
Respuesta: Duda con convert a datetime

Halo perdona mi ignorancia, pero a q te refieres con indices? y bueno el select que pones solo me manda la cadena de la fecha con 8 caracteres asi: '14/04/20'

por eso ahora si no capte que me quisiste decir :( sorry en serio pero podrias explicarme q trataste de decirme?
__________________
Wow! No se que decir...
  #8 (permalink)  
Antiguo 21/04/2009, 20:22
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: Duda con convert a datetime

zyon, un INDICE, es como las direcciones en una entrada de un edificio de 50 pisos, si vas a ver al "DR. JIMENEZ", juralo, que estara en el INDICE de la entrada, no vas a andar preguntando en cada piso y cada departamento si ahi vive el DR. JIMENEZ.

En cuanto al CONVERT, ¿De que tipo es tu dato "valor"?
  #9 (permalink)  
Antiguo 22/04/2009, 08:23
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 19 años, 1 mes
Puntos: 3
Respuesta: Duda con convert a datetime

Ho ya veo gracias por la aclaracion y el tipo de VALOR es un Varchar(6000), es de este tipo por que este campo es utilizado en una forma que es definido dinamicamente, puedo estableces campos numericos, de fecha o de texto, pero para alvergar cada uno se definio que fuera del tipo VARCHAR para contener los numericos y fechas y por eso es de ese tipo el campo, que opinas?
__________________
Wow! No se que decir...
  #10 (permalink)  
Antiguo 22/04/2009, 21:17
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: Duda con convert a datetime

Malo, muy malo

No entiendo bien la necesidad de guardar tipos de datos diferentes en un campo VARCHAR y luego de 6000.

Por lo visto, guardas las fechas en algun formato especial, '14/04/2008', supongo que es DIA/MES/AÑO.

Tendrias que convertir primero a DATETIME y despues hacer tu comparacion, como lo indicas en tu primer pregunta, PERO (el maldito "pero"), si el formato de tu fecha NO CUMPLE con el formato de una fecha, estas frito, por ejemplo

'14/4/08', Teoricamente, seria el 14 de Abril de 2008, pero si haces un ISDATE('14/4/08'), con seguridad te mandara un 0 como resultado, o sea, no es formato fecha.

Por tanto, al tratar de convertirlo, no podra hacerlo, tendrias que "descartar" aquellos registros, que "crees" que tienen fecha y no lo son.

Ademas, del NO USO de indices.
  #11 (permalink)  
Antiguo 23/04/2009, 08:59
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 19 años, 1 mes
Puntos: 3
Respuesta: Duda con convert a datetime

Que tal, si se que esta mal pero lo hicieron asi supongo que por ser un campo que es configurable por el usuario ya que el defini que tipo de datos ver, lo que si es un hecho que el formato siempre es '14/04/2008' en los campos que capturan fecas ya que usamos un JS que los asigna y no hay modo que el usuario ingrese mal el valor, de hecho si hago un

select convert(datetime, VALOR, 103) from mi_tabla where isdate(valor)=1

me arroja correctamente todos mis 5 mil registros que tengo convertidos a formato de fecha, pero al momento de usar un convert en una comparacion truena en el primer registro :( ya no se que hacer :s
__________________
Wow! No se que decir...
  #12 (permalink)  
Antiguo 23/04/2009, 19:19
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 3 meses
Puntos: 180
Respuesta: Duda con convert a datetime

Si dices que es en el primer registro, muestrame el contenido del campo..............
  #13 (permalink)  
Antiguo 24/04/2009, 08:12
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 19 años, 1 mes
Puntos: 3
Respuesta: Duda con convert a datetime

Bien, estos serian los tres priemros registros que tengo:

Código PHP:
Plantilla|Clave|No_columna|No_renglon|Valor
REGISTRO
|00.122674017418442Seccion1|1|2|15/04/2009
REGISTRO
|00.252872444992735Seccion1|1|2|15/04/2009
REGISTRO
|00.955574370206322Seccion1|1|2|15/04/2009
... 
y asi como en esos tres registros hay otros 5 mil aprox con el misma estructura en lo que es la fecha, pero si pór ejemplo ejecuto este query:

Código PHP:
select from doc_registros
    where no_renglon
='1' and no_columna='2' and isdate(valor)=and plantilla='REGISTRO'
        
and CONVERT (datetime,CONVERT(VARCHAR,valor,103),103) > CONVERT (datetime,CONVERT(VARCHAR,'14/04/2009',103),103
me devuelve solo:

Código PHP:
REGISTRO|00.122674017418442Seccion1|1|2|15/04/2009 
y enseguida me marca el error:

Código PHP:
Msg 241Level 16State 1Line 1
Conversion failed when converting datetime from character string

y si por ejemplo ejecuto:

Código PHP:
select *,CONVERT (datetime,CONVERT(VARCHAR,valor,103),103FECHAS from doc_catalogo_valores
    where no_renglon
='1' and no_columna='2' and isdate(valor)=and plantilla='REGISTRO' 
me devuelve correctamente los valores convertidos:
Código PHP:
Plantilla|Clave|No_columna|No_renglon|Valor|Fechas
REGISTRO
|00.122674017418442Seccion1|1|2|15/04/2009|2009-04-15 00:00:00.000
REGISTRO
|00.252872444992735Seccion1|1|2|15/04/2009|2009-04-15 00:00:00.000
REGISTRO
|00.955574370206322Seccion1|1|2|15/04/2009|2009-04-15 00:00:00.000 
Que hago mal, tal vez es una tonteria y no me doy cuenta
__________________
Wow! No se que decir...
  #14 (permalink)  
Antiguo 27/04/2009, 07:10
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 19 años, 1 mes
Puntos: 3
Respuesta: Duda con convert a datetime

Entonces no hay algo mas que pueda revisar :( ?
__________________
Wow! No se que decir...
  #15 (permalink)  
Antiguo 28/04/2009, 17:20
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 19 años, 1 mes
Puntos: 3
Pregunta Respuesta: Duda con convert a datetime

Hey que onda, miren como me deja pasar el error:

Código PHP:
and 
    (
SELECT case isdate(valorwhen 1 then CAST(valor AS DATETIMEend)
    >
    
cast('14/04/2009' as datetime
pero siento que eso no esta bien de algun modo no es lo ideal, saben que tambien me encontre, si convierto la fecha de "14/04/2009" a un valor numerico asi "20090414" tambien me marca un error en al convercion de datos

Código PHP:
... and (select convert(numeric,Substring(valor,7,10)+Substring(valor,4,2)+Substring(valor,0,3) > ... 
Pero sigo con la duda de por que no me deja cnvertir los valores, habra un problema por ser tantos datos? y por q con el CASE si me lo permite? :(
__________________
Wow! No se que decir...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:52.