SQL DateTime: Tipo de datos

En las tablas de SQL Server, puede usar el tipo de datos SQL DateTime para almacenar fechas. La discrepancia entre los tipos de datos Date y DateTime radica en el nivel de detalle en el que ambos tipos de datos almacenan la información de la fecha.

En la definición de una tabla, se puede especificar una columna como de tipo SQL DATETIME mediante la sintaxis DATETIME. Es un tipo de datos muy útil en SQL, ya que permite almacenar información de fechas y horas de manera eficiente y precisa, y que es ampliamente utilizado en muchas aplicaciones de bases de datos.

SQL datetime

El campo con tipos de datos sql datetime puede ser utilizado para filtrar, ordenar y agrupar registros en una base de datos y realizar operaciones matemáticas con fechas y horas. Ejemplos de uso incluyen registros de fecha y hora de transacciones, eventos programados, fechas de vencimiento, entre otros.  Algunas operaciones comunes incluyen:

  • Saca el segmento de fecha u hora de un valor de tipos SQL DATETIME.
  • Convertir un valor en una cadena en un formato especificado.
  • Sumar o restar un intervalo especificado a o desde un valor DATETIME

Elementos del tipo de datos SQL DATETIME

El formato de un valor del tipo de datos SQL DATETIME: YYYY-MM-DD HH:MI:SS. Podemos ver los detalle de este formato en la siguiente tabla.

Propiedad Valor
Sintaxisdatetime
UsoDECLARAR @MiDatetime  datetime

CREAR TABLA Table1 (Columna1  datetime )

Formato‘AAAA-MM-DD hh: mm: ss.nnn
Intervalo de tiempo00:00:00 a 23:59:59.997
Rangos de elementos
  • «YYYY» representa el año con cuatro dígitos desde 1753 hasta 9999 que representan un año.
  • «MM» representa el mes con dos dígitos, que van del 01 al 12, lo que representa un mes en el año especificado.
  • «DD» representa el día con dos dígitos, que van del 01 al 31 según el mes, lo que representa un día del mes especificado.
  • «HH» representa las horas con dos dígitos, que van del 00 al 23, que representan la hora.
  • «MI» representa los minutos con dos dígitos, que van del 00 al 59, que representan el minuto.
  • «SS» representa los segundos con dos dígitos, que van del 00 al 59, que representa el segundo.
  • n* es cero a tres dígitos, que van desde 0 a 999, que representan los segundos fraccionarios.
Tamaño de almacenamiento8 bytes
Valor por defecto1900-01-01 00:00:00

Por lo general, la aplicación cliente se ocupa del formateo de un valor SQL DateTime en una fecha y hora más legible. Sin embargo, al casos que es conveniente convertir un sql DateTime en una cadena de caracteres formateada dentro de una instrucción SQL.

Conversión implícita entre fecha y fecha y hora

Ejemplo: Asignar valor de DATE a DATETIME en SQL Server


-- Declarar variable de tipo DATE
DECLARE @date DATE = '2023-12-01';

-- Declarar variable de tipo DATETIME y asignarle la fecha
DECLARE @datetime DATETIME = @date; 

-- Mostrar resultado
SELECT @datetime AS 'Resultado';
SQL datetime

En SQL server, puedes convertir un valor de sql datetime a otros formatos usando la función CONVERT, Cast… El siguiente es un ejemplo de cómo convertir un valor de datetime a un string en formato dd/mm/yyyy: 

Ejemplo: Usar CONVERT para formato de fecha en SQL Server


-- Convertir la fecha actual al formato DD/MM/YYYY
SELECT CONVERT(VARCHAR, GETDATE(), 3) AS 'DD/MM/YYYY';

Conclusión

SQL DATETIME es un formato de datos que almacena una fecha y hora específicas. Así como también, sentencias para realizar comparaciones y operaciones de fecha. El formato de sql DATETIME es ‘AAAA-MM-DD HH:MM:SS’.

Ten en cuenta que el formato de fecha y hora puede variar dependiendo de la configuración del sistema operativo o del manejador de base de datos.

Microsoft recomienda usar DateTime2 en lugar de SQL DateTime, ya que es más portátil y proporciona más precisión en segundos. Además, DateTime2 tiene un intervalo de fechas más amplio y una precisión de segundos opcional definida por el usuario con mayor precisión. Datetime2 se alinea con los estándares SQL.

En SQL existen varios tipos de datos que se utilizan para representar fechas y horas. Algunos de los tipos de datos más comunes incluyen:

Tipo de dato DATE en SQL Server

Date: Almacena solo la fecha, sin información de hora. El formato por defecto es yyyy-mm-dd.


-- Declarar una variable de tipo DATE
DECLARE @MiFecha DATE = '2023-09-03';
SELECT @MiFecha AS 'SoloFecha';

-- Crear una tabla con columna DATE
CREATE TABLE Eventos (
    EventoID INT PRIMARY KEY,
    FechaEvento DATE
);

-- Insertar un registro
INSERT INTO Eventos (EventoID, FechaEvento)
VALUES (1, '2023-12-01');

-- Consultar la tabla
SELECT * FROM Eventos;

Tipo de dato TIME en SQL Server

Time: Almacena solo la hora, sin información de fecha. El formato es hh:mm:ss[.nnnnnnn], donde los decimales representan fracciones de segundo.


-- Declarar una variable de tipo TIME
DECLARE @MiHora TIME = '14:30:45.1234567';
SELECT @MiHora AS 'SoloHora';

-- Crear una tabla con columna TIME
CREATE TABLE Horarios (
    HorarioID INT PRIMARY KEY,
    HoraInicio TIME,
    HoraFin TIME
);

-- Insertar registros
INSERT INTO Horarios (HorarioID, HoraInicio, HoraFin)
VALUES (1, '08:00:00', '12:00:00'),
       (2, '13:00:00', '17:30:00');

-- Consultar la tabla
SELECT * FROM Horarios;

Tipo de dato DATETIME2 en SQL Server

Datetime2: Es similar a DATETIME, pero permite una mayor precisión en el tiempo. El formato es yyyy-mm-dd hh:mm:ss[.nnnnnnn], donde nnnnnnn representa fracciones de segundo hasta 7 dígitos.


-- Declarar una variable de tipo DATETIME2 con precisión de 7
DECLARE @MiFechaHora2 DATETIME2(7) = '2023-12-01 14:30:45.1234567';
SELECT @MiFechaHora2 AS 'FechaHoraPrecisa';

-- Crear una tabla con columna DATETIME2
CREATE TABLE EventosPrecisos (
    EventoID INT PRIMARY KEY,
    FechaInicio DATETIME2(7),
    FechaFin DATETIME2(7)
);

-- Insertar registros con alta precisión
INSERT INTO EventosPrecisos (EventoID, FechaInicio, FechaFin)
VALUES (1, '2023-12-01 08:00:00.1234567', '2023-12-01 12:00:00.7654321'),
       (2, '2023-12-01 13:00:00.0000001', '2023-12-01 17:30:00.9999999');

-- Consultar la tabla
SELECT * FROM EventosPrecisos;

Tipo de dato SMALLDATETIME en SQL Server

SmallDatetime: Almacena tanto la fecha como el tiempo, pero con menor precisión que DATETIME. El formato es yyyy-mm-dd hh:mm. Los segundos siempre se redondean a 00.


-- Declarar una variable de tipo SMALLDATETIME
DECLARE @MiFechaHoraSmall SMALLDATETIME = '2023-12-01 14:30';
SELECT @MiFechaHoraSmall AS 'FechaHoraMenorPrecisión';

-- Crear una tabla con columna SMALLDATETIME
CREATE TABLE Citas (
    CitaID INT PRIMARY KEY,
    FechaInicio SMALLDATETIME,
    FechaFin SMALLDATETIME
);

-- Insertar registros
INSERT INTO Citas (CitaID, FechaInicio, FechaFin)
VALUES (1, '2023-12-01 08:00', '2023-12-01 12:00'),
       (2, '2023-12-01 13:00', '2023-12-01 17:30');

-- Consultar la tabla
SELECT * FROM Citas;

Tipo de dato DATETIMEOFFSET en SQL Server

Datetimeoffset: Es similar a DATETIME2, pero además almacena la información de la zona horaria (offset). El formato es yyyy-mm-dd hh:mm:ss[.nnnnnnn] [+|-]hh:mm, donde [+|-]hh:mm indica el desfase respecto a UTC.


-- Declarar una variable con fecha, hora y zona horaria
DECLARE @FechaHoraConZona DATETIMEOFFSET(3) = '2023-12-01 14:30:45.123 -05:00';
SELECT @FechaHoraConZona AS 'FechaHoraConOffset';

-- Crear una tabla con columna DATETIMEOFFSET
CREATE TABLE EventosConZona (
    EventoID INT PRIMARY KEY,
    FechaHora DATETIMEOFFSET(7)
);

-- Insertar registros con diferentes zonas horarias
INSERT INTO EventosConZona (EventoID, FechaHora)
VALUES (1, '2023-12-01 08:00:00.000 -05:00'),
       (2, '2023-12-01 14:00:00.000 +01:00');

-- Consultar la tabla
SELECT * FROM EventosConZona;

-- Convertir a hora UTC
SELECT SWITCHOFFSET(FechaHora, '+00:00') AS FechaUTC
FROM EventosConZona;

Deja un comentario