none
Error al convertir una cadena de caracteres en fecha y/u hora.

    Question

  • Saludos !

      Porque me genera un error de "convertir una cadena de caracteres en fecha y/u hora", en mi siguiente consulta : "select *from TABLA-BD where CONVERT(date,fecha,103) between '2013-05-25' and '27-05-27'"  Cabe mencionar que mi campo fecha de mi tabla la tengo de tipo char(50), y guardo cadenas con fecha y hora

    Monday, May 27, 2013 6:25 PM

Answers

  • Hola:

    1. Considera la opción de modificar la columna fecha a un tipo DATETIME, además que aplicar una función pierde el índice si es que tu columna fecha estuviera dentro de uno. Es posible que algun valor dentro de esta columna no es posible convertirlo a DATE, prueba primero con WHERE ISDATE( fecha ) = 0  y así verificarás si hay algun dato inválido.
    2. 27-05-27 no es una fecha válida , prueba con select isdate( '27-05-27' ) y te arrojará como resultado 0.

    Te sugiero utilizar el formato universal fecha-hora YYYYMMDD HH:mm:ss y no tendrás tantos dolores de cabeza.

    SALUDOS!


    Sergio Sánchez Arias
    Oaxaca,México
    AYÚDANOS A AYUDARTE

    • Marked as answer by SebasCast Monday, May 27, 2013 8:21 PM
    Monday, May 27, 2013 6:34 PM

All replies

  • Hola:

    1. Considera la opción de modificar la columna fecha a un tipo DATETIME, además que aplicar una función pierde el índice si es que tu columna fecha estuviera dentro de uno. Es posible que algun valor dentro de esta columna no es posible convertirlo a DATE, prueba primero con WHERE ISDATE( fecha ) = 0  y así verificarás si hay algun dato inválido.
    2. 27-05-27 no es una fecha válida , prueba con select isdate( '27-05-27' ) y te arrojará como resultado 0.

    Te sugiero utilizar el formato universal fecha-hora YYYYMMDD HH:mm:ss y no tendrás tantos dolores de cabeza.

    SALUDOS!


    Sergio Sánchez Arias
    Oaxaca,México
    AYÚDANOS A AYUDARTE

    • Marked as answer by SebasCast Monday, May 27, 2013 8:21 PM
    Monday, May 27, 2013 6:34 PM
  • No es por incordiar, pero es una práctica horrible crear una columna que va a contener fechas del tipo char(50), para eso SQL Server tiene el tipo de datos específicos para fecha.

    Además cuando pones un literal de fecha deberías unar el formato AAAAMMDD que siempre se interpreta de la misma manera:

    select *
    from TABLA-BD 
    where CONVERT(date,fecha,103) between '20130525' and '20130527'
    Si estas consulta te da error, será porque tienes una fecha en la tabla que no corresponde con formato 103.

    Monday, May 27, 2013 6:35 PM
  • Ok gracias !!!

    Creo que voy a seguir sus sugerias de cambiar mi campo de tipo ps es lo mas conveniente ...

    Monday, May 27, 2013 8:21 PM