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.

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 |
Sintaxis | datetime |
Uso | DECLARAR @MiDatetime datetime CREAR TABLA Table1 (Columna1 datetime ) |
Formato | ‘AAAA-MM-DD hh: mm: ss.nnn |
Intervalo de tiempo | 00:00:00 a 23:59:59.997 |
Rangos de elementos |
|
Tamaño de almacenamiento | 8 bytes |
Valor por defecto | 1900-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';

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;