sql >> Base de Datos >  >> RDS >> Database

Tipo de datos de fecha y hora de T-SQL

Introducción

Los tipos de datos son atributos que especifican el tipo de datos que pueden contener objetos como columnas, variables locales, expresiones y parámetros. En todo el mundo de RDBMS, los tipos de datos generalmente se agrupan en tipos de datos de cadena, numéricos y de fecha.

T-SQL admite 6 tipos de datos de fecha y hora, a saber:

  1. Fecha y hora
  2. Pequeña cita
  3. Fecha
  4. Tiempo
  5. Fechahora2
  6. Desplazamiento de fecha y hora

Los dos primeros tipos de datos se consideran versiones heredadas de los más nuevos. En este artículo, nos centramos en los tipos de datos de fecha y, específicamente, en el datetime y fechahora2 tipos de datos disponibles en SQL Server. La Tabla 1 brinda detalles de los diversos tipos de datos de fecha y hora disponibles en SQL Server.

[identificación de la tabla=59 /]

Pestaña 1 Tipos de datos de fecha y hora

Fechahora y Fechahora2

Datatime es un tipo de datos que combina la fecha con la hora en un formato de reloj de 24 horas. El intervalo de fechas admitido en el tipo de datos de fecha y hora es el que se muestra en la pestaña 1 y tiene una precisión de aproximadamente 3 milisegundos.

Datetime2 es una extensión del tipo de datos datetime. Se adapta a una gama más amplia de valores posibles y tiene una precisión de 100 nanosegundos, que es mucho mejor que su predecesor. Otro aspecto clave del tipo de datos dattime2 es que el almacenamiento requerido oscila entre 6 y 8 bytes, según la precisión que elija.

  • Puede lograr una precisión de 1 milisegundo al permitir tres lugares decimales en el componente de segundos. Cada valor consumirá seis bytes.
  • Puede lograr una precisión de 100 nanosegundos al permitir siete lugares decimales en el componente de segundos. Cada valor consumirá ocho bytes.

Demostraciones

Insertar valores de fecha incorrectos

Creamos una tabla con los detalles que se muestran en el Listado 1 para realizar algunas demostraciones que ilustran cómo manipular el datetime y fechahora2 tipos de datos.

-- Listing 1 Create Table and insert Rows
-- Create Table with Data Types
use Practice2017
go
create table staffers (
fname varchar(50),
lname varchar(50),
JobTitle varchar(100),
DOB datetime,
PreciseDOB datetime2,
LastLoginTime time)
go

Luego tratamos de llenar la tabla con una fila como se muestra en el Listado 2, pero obtenemos el error que se muestra en la Fig. 1. La palabra clave en el mensaje de error es valores "fuera de rango". Lo que está diciendo es que su valor que estamos tratando de insertar es más bajo que 01-Jan-1753 o superior a 31 de diciembre de 9999 . En este caso, el problema es que no hemos utilizado el formato de entrada recomendado de 'YYYYMMDD hh:mm:ss.nnn ’ (ver Tabla 1). Leyendo el valor '06101979 ', SQL Server asume que 0610 es el año (que coincide con YYYY). Este error no se produce para el tipo de datos datetime2 porque el rango de datetime2 es más amplio a partir del año 0001.

-- Listing 2 Insert Rows with Wrong Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06101979'
,'06101979'
,'8:00 AM'
)

Fig. 1 Error devuelto para la columna de fecha y hora

Insertar valores de fecha correctos

Intentamos corregir el problema ingresando el formato de entrada correcto para la columna de fecha y hora como se muestra en el Listado 3. Cuando ejecutamos la declaración nuevamente, obtenemos el error que se muestra en la Fig. 2. Este error es esencialmente causado por la misma falla en seguir las especificaciones del formato de entrada. Sin embargo, el problema radica en la otra parte de la fecha '06101979 ' que coincide con el formato de entrada 'AAAAMMDD hh:mm:ss.nnn '. En este caso, SQL Server asumió 19 Es un mes y 79 es un día del mes. Intentar esta conversión implícita falla ya que ninguna de las afirmaciones anteriores es verdadera.

-- Listing 3 Insert Rows with One Correct Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'01061979'
,'8:00 AM'
)

Fig. 2 Error devuelto para la columna Datetime2

El listado 4 nos permite demostrar la última afirmación. El valor 01101201 encaja en el rango de datetime2 y podemos insertar la fila. Este valor se traduce al 1 de diciembre de 0110 como vemos en la figura 3.

-- Listing 4: Insert Rows with Correct Date Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'01101201'
,'8:00 AM')
-- Listing 5: Insert Rows with All Correct Entry Format
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'19791006'
,'19791006'
,'8:00 AM'
)

Verificación de los datos

Fig. 3 Consulta del conjunto de datos

Cuando consultamos la tabla de empleados, vemos claramente la precisión del tipo de datos de fecha y hora en comparación con la alternativa de fecha y hora2. Pasemos a algo un poco más siniestro:la configuración de idioma. Eche un vistazo al Listado 6. Estamos insertando exactamente los mismos registros usando el formato de fecha 06/10/1979 . Este formato NO es neutral para el idioma, por lo tanto, cuando establecemos el idioma en británico en la primera declaración y luego a us_english en el segundo, encontramos que hemos insertado dos fechas diferentes en realidad, aunque nuestros valores brutos son los mismos. Por eso es tan importante usar siempre el formato de entrada recomendado cuando se trata de datetime y fechahora2 .

-- Listing 6: Impact of Language Settings

set language british
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06/10/1979'
,'06/10/1979'
,'8:00 AM'
)


set language us_english
insert into staffers 
values
(
'Kenneth'
,'Igiri'
,'Database Administrator'
,'06/10/1979'
,'06/10/1979'
,'8:00 AM'
)

Fig. 4 Personal de consulta

Con la configuración de idioma como británico , SQL Server interpreta las dos primeras cifras como el día pero con la configuración de idioma como us_english , SQL Server interpreta las dos primeras cifras como un mes. Una última cosa que debemos mencionar aquí es que al insertar nuestros registros, no especificamos el componente de tiempo, por lo que SQL Server asume automáticamente que era la media noche de la fecha especificada.

Conclusión

En este artículo, hemos aprendido cómo son los tipos de datos datetime y datetime2, sus diferencias clave y cómo asegurarse de que está ingresando la fecha correcta al usar estos tipos de datos. En el transcurso de este, también hemos examinado dos errores con los que un desarrollador podría encontrarse al trabajar con estos tipos de datos.

Referencias

  • Tipos de datos SQL
  • Ben-Gan, I. (2016) Fundamentos de T-SQL. págs. 74-78. Prensa de Microsoft.