none
Convertir numeros a fechas RRS feed

  • Pregunta

  • Buenas tardes.

    Tengo un pequeño problema al momento de realizar la conversión de un numero a fecha, si lo realizo en excel me devuelve la fecha correcta pero al momento de ejecutarla en el query me devuelve lafecha sumada 2 dias.

    select empl_cod, EMPL_AREA,CONVERT(smalldatetime,EMPL_FECH_AF)as FECHAA from TBL_EMPLEADO where EMPL_APELL+' '+EMPL_NOMB = 'ACAN ACAN ANGEL'

    Este es mi query, y me arroja esto.

    empl_cod	EMPL_AREA	FECHAA
    4993	            136	      2014-11-03 00:00:00

    Como podria cambiarlo para que solo me arroje la fecha y el valor correcto que deberia ser 2014-11-01.

    De antemano les agradezco su ayuda.

    Saludos.

    jueves, 22 de octubre de 2015 22:21

Respuestas

  • Simplemente un convert(varchar(10),fecha,105). Aunque como suele decir Willams esto debe ser de la capa de presentación más que de la Base de datos.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    viernes, 23 de octubre de 2015 14:31
    Moderador
  • Simplemente un convert(varchar(10),fecha,105). Aunque como suele decir Willams esto debe ser de la capa de presentación más que de la Base de datos.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    Asi quedaria la sentencia.

    CREATE PROCEDURE BUSQUEDADATOS
    @OBRERO VARCHAR(100) AS
    SELECT EMPL_COD AS COD,EMPL_CEDU AS CEDULA, D.SECCION AS SECCION,CONVERT(VARCHAR(10),CAST(DATEADD(D,0,EMPL_FECH_AF-2) AS DATE),105) AS FECHAA
    FROM
    TBL_SECCION AS D
    INNER JOIN
     TBL_EMPLEADO AS E
     ON E.EMPL_AREA = D.ID_CODIGO
     WHERE EMPL_FECH_AF>0 AND EMPL_APELL+' '+EMPL_NOMB = @OBRERO;
    Saludos y gracias por su ayuda.

    • Marcado como respuesta roberto1390 sábado, 24 de octubre de 2015 2:57
    sábado, 24 de octubre de 2015 2:57

Todas las respuestas

  • Hola.

    Puedes compartirnos el script de la tabla y algunos de los datos que tienes en esta tabla, por favor.

    Así podemos revisar y verificar en efecto que puede estar sucediendo.

    Gracias y saludos,


    Guillermo Taylor F.
    MVP SQL Server & IT Pro
    Mi Blog

    jueves, 22 de octubre de 2015 22:58
  • Hola.

    Puedes compartirnos el script de la tabla y algunos de los datos que tienes en esta tabla, por favor.

    Así podemos revisar y verificar en efecto que puede estar sucediendo.

    Gracias y saludos,


    Guillermo Taylor F.
    MVP SQL Server & IT Pro
    Mi Blog

    Adjunto una captura de la tabla empleado como ven la columna EMPL_FECHA_AF esta en formato de numero y contiene la fecha de afiliacion del empleado lo que quiero es convertirla a formato de fecha para que me pueda aparecer en el formulario el cual necesito implementar si me podrian ayudar les quedaria agradecido.


    • Editado roberto1390 viernes, 23 de octubre de 2015 0:53 Mas informacion.
    viernes, 23 de octubre de 2015 0:41
  • creo que el tema está en como lo hace excel y sql y que esos dos días simplemente tienes que hacer convert(smalldatatiime.Empl_fech_af -2)


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    viernes, 23 de octubre de 2015 6:56
    Moderador
  • Hola:

    Creo que tienes un pequeño problema (o no tan pequeño), y es debido a 'creer' que una fecha tiene un numero 'equivalente' en todos los productos de Microsoft... y eso es incorrecto:

    SQLSERVER:

       Entero = 1 => Fecha = 1900-01-02.

       Para comprobarlo: SELECT CAST(DATEADD(d,0,1) AS DATE)

                                   SELECT CAST(1 AS DATETIME)

    EXCEL:

       Entero = 1 => Fecha = 1900-01-01

       Para comprobarlo: Escribes 1 en una celda y cambias el formato a FECHA

    ACCESS

       Entero = 1 => Fecha = 1899-12-31

       Para comprobarlo: Crea una tabla con un campo numérico y creas un solo registro con valor 1. Guardas la tabla, modificas el diseño y cambias el tipo a Fecha/Hora.

    Por lo tanto no puedes trabajar con números como fechas si 'compartes' datos entre aplicaciones... incluso aunque sean del mismo fabricante.

    Un saludo

    PD: Además, tampoco se puede asegurar que esto no cambie en un futuro.
    • Editado LG DES viernes, 23 de octubre de 2015 9:19
    • Propuesto como respuesta LG DES lunes, 26 de octubre de 2015 8:48
    viernes, 23 de octubre de 2015 7:50
  • Hola:

    Creo que tienes un pequeño problema (o no tan pequeño), y es debido a 'creer' que una fecha tiene un numero 'equivalente' en todos los productos de Microsoft... y eso es incorrecto:

    SQLSERVER:

       Entero = 1 => Fecha = 1900-01-02.

       Para comprobarlo: SELECT CAST(DATEADD(d,0,1) AS DATE)

                                   SELECT CAST(1 AS DATETIME)

    EXCEL:

       Entero = 1 => Fecha = 1900-01-01

       Para comprobarlo: Escribes 1 en una celda y cambias el formato a FECHA

    ACCESS

       Entero = 1 => Fecha = 1899-12-31

       Para comprobarlo: Crea una tabla con un campo numérico y creas un solo registro con valor 1. Guardas la tabla, modificas el diseño y cambias el tipo a Fecha/Hora.

    Por lo tanto no puedes trabajar con números como fechas si 'compartes' datos entre aplicaciones... incluso aunque sean del mismo fabricante.

    Un saludo

    PD: Además, tampoco se puede asegurar que esto no cambie en un futuro.

    Correcto en base a tu comentario tenias toda la razon realice la prueba con la secuencia del 1 al 5 y todos dieron un resultado con el mes y año correcto pero el dia en todos los casos se le sumama 2, adicional a esto como puede hacer para que la fecha se visualize asi 12/10/2015 dd/mm/yyyy.

    Saludos.

    viernes, 23 de octubre de 2015 13:22
  • Simplemente un convert(varchar(10),fecha,105). Aunque como suele decir Willams esto debe ser de la capa de presentación más que de la Base de datos.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    viernes, 23 de octubre de 2015 14:31
    Moderador
  • Simplemente un convert(varchar(10),fecha,105). Aunque como suele decir Willams esto debe ser de la capa de presentación más que de la Base de datos.


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    Asi quedaria la sentencia.

    CREATE PROCEDURE BUSQUEDADATOS
    @OBRERO VARCHAR(100) AS
    SELECT EMPL_COD AS COD,EMPL_CEDU AS CEDULA, D.SECCION AS SECCION,CONVERT(VARCHAR(10),CAST(DATEADD(D,0,EMPL_FECH_AF-2) AS DATE),105) AS FECHAA
    FROM
    TBL_SECCION AS D
    INNER JOIN
     TBL_EMPLEADO AS E
     ON E.EMPL_AREA = D.ID_CODIGO
     WHERE EMPL_FECH_AF>0 AND EMPL_APELL+' '+EMPL_NOMB = @OBRERO;
    Saludos y gracias por su ayuda.

    • Marcado como respuesta roberto1390 sábado, 24 de octubre de 2015 2:57
    sábado, 24 de octubre de 2015 2:57