none
Guardar segundos junto con la fecha RRS feed

  • Pregunta

  • Hola:

    Tengo un campo smalldatetime.

    Me guarda la fecha pero no los segundos. Si intento poner segundos a una fecha guardada, me pone 0 segundos.

    ¿Qué hacer para que guarde los segundos?

    Muchas gracias.


    • Editado volar.2016 sábado, 25 de julio de 2020 7:30
    sábado, 25 de julio de 2020 7:30

Respuestas

  • Necesitas un DateTime, que tiene más bytes y le dan capacidad para almacenar segundos. El SmallDateTime es más pequeño y no tiene espacio suficiente para conservar los segundos, solo admite horas y minutos.
    • Marcado como respuesta volar.2016 sábado, 25 de julio de 2020 9:18
    sábado, 25 de julio de 2020 8:11

Todas las respuestas

  • Necesitas un DateTime, que tiene más bytes y le dan capacidad para almacenar segundos. El SmallDateTime es más pequeño y no tiene espacio suficiente para conservar los segundos, solo admite horas y minutos.
    • Marcado como respuesta volar.2016 sábado, 25 de julio de 2020 9:18
    sábado, 25 de julio de 2020 8:11
  • Hola volar.2016:

    Tienes que cambiar la definición de tú columna.

    DROP TABLE dbo.campos;
    
    Create table dbo.campos
    			 (
    			 id    int
    		   , fecha smalldatetime
    		   , fecha2 smalldatetime
    			 );
    go
    
    insert into dbo.campos(id
    					 , fecha
    					 , fecha2
    					 )
    values
    	   ( 1, getdate(), getdate() ),
    	   ( 2, null, null );
    go
    
    select id
    	 , fecha
    	 , fecha2 
    	   from dbo.campos;
    go
    

    Imaginando que tienes una tabla con datos, donde hemos definido dos columnas como smalldatetime, cuya definición dice:

    Define una fecha que se combina con una hora del día. La hora está en un formato de día de 24 horas , con segundos siempre a cero (: 00) y sin fracciones de segundo.

    https://docs.microsoft.com/es-es/sql/t-sql/data-types/smalldatetime-transact-sql?view=sql-server-ver15

    La solución sería cambiar el tipo de dato.

    alter table dbo.campos 
    alter column fecha datetime;
    go
    alter table dbo.campos
    alter column fecha2 datetime2;
    go
    select id
    	 , fecha
    	 , fecha2 
    	   from dbo.campos;

    Los datos no han cambiado, salvo en la precisión de la información.

    Pero ahora si puedes guardar los segundos y más.

    update dbo.campos
    	   set fecha = getdate()
    		 , fecha2 = getdate()
    where id = 2;
    go
    select id
    	 , fecha
    	 , fecha2 
    	   from dbo.campos;

    La precisión de datetime, incluye las horas, minutos, segundos y una fracción de segundos de 0 a 997 en incrementos de 0.000, 0.003 y 0.007.

    https://docs.microsoft.com/es-es/sql/t-sql/data-types/datetime-transact-sql?view=sql-server-ver15

    Y con el estándar SQL datetime2 donde puedes guardar, horas, minutos, segundos y la fracción esta comprendida entre 0 y 9999999.

    https://docs.microsoft.com/es-es/sql/t-sql/data-types/datetime2-transact-sql?view=sql-server-ver15

    sábado, 25 de julio de 2020 8:44