En SQL Server existen diferentes formas de guardar las fechas, y dependiendo de las necesidades de precisión o de las fracciones de segundos, se deberá ocupar algunos de los diferentes tipos de datos de fecha en SQL Server.
DATE
Es el tipo de datos de fecha más simple, permite registrar únicamente el día (año, mes, día) sin horas. Si lo que se requiere es solo guardar un día -sin hora, minuto ni segundo- esta es una buena opción ya que es el tipo de datos fecha que ocupa menos espacio: 3 Bytes. Útil cuando se guarda una fecha de ingreso, de baja, y no es relevante tener mayor detalle del evento.
El valor por default es 1900-01-01.
SMALLDATETIME
Tiene un mayor detalle que el tipo de datos DATE, ya que guarda hora y minuto. Ocupa siempre 4 Bytes y el rango de fecha va del 1 de enero de 1900 al 6 de junio del 2079 y en el caso de las horas de las 00:00 a las 23:59.
Para la mayoría de los sistemas administrativos es el mejor tipo de datos por el tamaño que ocupa y por la precisión (hasta minutos) que maneja.
El valor por default es 1900-01-01 00:00.
DATETIME
Si lo que se requiere es guardar un evento con el año,mes y día (como en el tipo de dato DATE) pero registrando también el momento (hora, minutos, segundo y hasta 3 dígitos de detalle). Ocupa 8 Bytes.
El rango de día es del 1 de enero de 1753 al 31 de diciembre de 9999. En el caso de la hora el rango va de 00:00:00.000 a 23:59:59.997.
El valor por default es 1900-01-01 00:00:00.
DATETIME2
Es un tipo de datos similar a DATETIME (se guarda del año a fracción de segundo) pero con una mayor precisión.del 1 de enero del año 1 al 31 de diciembre del 9999 y con detalle de horas de 00:00:00 a las 23:59:59.9999999
Ocupa de 6, 7 u 8 Bytes dependiendo de la precisión de las fracciones de segundo (hasta 2, de 3 a 4, y más de 7 respectivamente).
El valor por default es 1900-01-01 00:00:00
TIME
Es un tipo de datos en SQL Server que solo guarda la hora, si el día (año, mes y día). Guarda hora, minuto, segundo y fracciones de segundo de hasta 7 dígitos de precisión, es decir, el rango de horas que maneja son de 00:00:00.0000000 a las 23:59:59.9999999.
Muy útil cuando se quiere guardar una hora (horario de trabajo, hora de una alarma, etc.).
El valor pore default es 00:00:00.
Delimitador de valores tipo fecha
Si se quiere utilizar una fecha (una constante) en código SQL se tiene que delimitar por comillas simples en SQL Server. Ejemplos de cadenas de fechas serían ’15/01/2000′, 2018-12-31′, ‘2000-01-01 14:56:39′, etc.
Lo recomendable es siempre utilizar constantes de fecha en formato año-mes-día para evitar ambigüedades (’01/02/2003’ se podría interpretar como 2 de enero o como 1 de febrero de 2003, por lo que lo mejor sería ‘2003-01-02’ y ‘2003-02-01’ respectivamente).