none
Cambiar formato de ingreso de fechas en sql server RRS feed

  • Pregunta

  • Buenas tardes, estoy intentando hacer el siguiente registro para pruebas.

    insert into guiasMedicamentos values (
        3,
        '11/02/2019',
        2,
        'AB AMBROMOX',
        '600 mg',
        '11/01/2019',
        '11/02/2020',
        3.50,
        500,
        'N° 001-000001',
        100,
        '20397180817'
    );

    como se ve las fechas esta en DMY pero al hacer el INSERT los guarda asi:

    2019-11-02 00:00:00.000

    2019-11-01 00:00:00.000

    2020-11-02 00:00:00.000

    quisiera saber como hacer que se guarde en el formato que le mando sin incluir la hora.

    Gracias de antemano.


    miércoles, 13 de marzo de 2019 18:04

Respuestas

  • Es por el tipo de dato de la tabla , si lo quieres en ese formato deberías usar el tipo de dato date

    date (Transact-SQL)


    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    • Marcado como respuesta edinsonsr.95 miércoles, 13 de marzo de 2019 20:25
    miércoles, 13 de marzo de 2019 18:08
  • Hola edisonsr.95:

    SQL Server guarda las fechas en binario. No importa como te las muestre, ni tan siquiera como las guardas.

    Existe mucha documentación al respecto, pero te pongo un ejemplo simple

    create table guiasMedicamentos (fechaDateTime datetime, fechaDateTime2 datetime2, fechaDate date)
    go
    insert into guiasMedicamentos(fechaDate, fechaDateTime2, fechaDateTime)
    values
    (getdate(), getdate(), getdate());
    go
    select * from guiasMedicamentos
    go
    set language spanish -- conlleva set dateformat dmy
    declare @fecha datetime2 ='11/01/2019 19:53:38.140000'
    select cast(@fecha as datetime) fechaDateTime_DesdeVar,  @fecha as fechaDateTime2_DesdeVar, cast(@fecha as date) as fechaDate_DesdeVar
    
    go
    set language us_english -- conlleva set dateformat dmy
    declare @fecha datetime2 ='11/01/2019 19:53:38.140000'
    select cast(@fecha as datetime) fechaDateTime_DesdeVar_US,  @fecha as fechaDateTime2_DesdeVar_US, cast(@fecha as date) as fechaDate_DesdeVar_US
    

    Tanto la entrada, como la salida, pueden ser formateadas, ya que evidentemente, los humanos no trabajamos en binario.

    Salida:

    Tipos de dato Fecha y Hora

    https://docs.microsoft.com/es-es/sql/t-sql/data-types/date-and-time-types?view=sql-server-2017

    • Marcado como respuesta edinsonsr.95 miércoles, 13 de marzo de 2019 20:25
    miércoles, 13 de marzo de 2019 19:09
  • como se ve las fechas esta en DMY

    Aparte de lo que ya te han comentado en cuanto a que el formato no se almacena, sino que se guarda la fecha en binario sin formato, hay un problema adicional:

    Las fechas, de forma predeterminada, se interpretan como MDY. Por lo tanto, si pones '11/01/2019', el sistema interpreta el 1 de Noviembre, y no el 11 de Enero.

    Para que te tome DMY puedes ejecutar este comando antes del INSERT:

    SET DATEFORMAT DMY

    • Marcado como respuesta edinsonsr.95 miércoles, 13 de marzo de 2019 20:25
    miércoles, 13 de marzo de 2019 19:19

Todas las respuestas

  • Es por el tipo de dato de la tabla , si lo quieres en ese formato deberías usar el tipo de dato date

    date (Transact-SQL)


    Votar y marcar respuestas es agradecer.
    Saludos.
    Lima-Perú

    • Marcado como respuesta edinsonsr.95 miércoles, 13 de marzo de 2019 20:25
    miércoles, 13 de marzo de 2019 18:08
  • Hola edisonsr.95:

    SQL Server guarda las fechas en binario. No importa como te las muestre, ni tan siquiera como las guardas.

    Existe mucha documentación al respecto, pero te pongo un ejemplo simple

    create table guiasMedicamentos (fechaDateTime datetime, fechaDateTime2 datetime2, fechaDate date)
    go
    insert into guiasMedicamentos(fechaDate, fechaDateTime2, fechaDateTime)
    values
    (getdate(), getdate(), getdate());
    go
    select * from guiasMedicamentos
    go
    set language spanish -- conlleva set dateformat dmy
    declare @fecha datetime2 ='11/01/2019 19:53:38.140000'
    select cast(@fecha as datetime) fechaDateTime_DesdeVar,  @fecha as fechaDateTime2_DesdeVar, cast(@fecha as date) as fechaDate_DesdeVar
    
    go
    set language us_english -- conlleva set dateformat dmy
    declare @fecha datetime2 ='11/01/2019 19:53:38.140000'
    select cast(@fecha as datetime) fechaDateTime_DesdeVar_US,  @fecha as fechaDateTime2_DesdeVar_US, cast(@fecha as date) as fechaDate_DesdeVar_US
    

    Tanto la entrada, como la salida, pueden ser formateadas, ya que evidentemente, los humanos no trabajamos en binario.

    Salida:

    Tipos de dato Fecha y Hora

    https://docs.microsoft.com/es-es/sql/t-sql/data-types/date-and-time-types?view=sql-server-2017

    • Marcado como respuesta edinsonsr.95 miércoles, 13 de marzo de 2019 20:25
    miércoles, 13 de marzo de 2019 19:09
  • como se ve las fechas esta en DMY

    Aparte de lo que ya te han comentado en cuanto a que el formato no se almacena, sino que se guarda la fecha en binario sin formato, hay un problema adicional:

    Las fechas, de forma predeterminada, se interpretan como MDY. Por lo tanto, si pones '11/01/2019', el sistema interpreta el 1 de Noviembre, y no el 11 de Enero.

    Para que te tome DMY puedes ejecutar este comando antes del INSERT:

    SET DATEFORMAT DMY

    • Marcado como respuesta edinsonsr.95 miércoles, 13 de marzo de 2019 20:25
    miércoles, 13 de marzo de 2019 19:19