Novedades en tipos de datos Fecha y Hora

Anuncio
SQL Server 2008 Bootcamp – Día 2
SQL Server 2008
Nuevos tipos de datos de
fecha y hora
Información sobre versión Beta
• Tanto la información como los ejemplos son
relativos a la beta pública de SQL Server 2008
CTP5
• Tanto comandos como funcionalidades pueden
diferir de la versión RTM final
© 2007 Solid Quality Mentors
2
Tipos “Date” y “Time”
Escenarios y requerimientos
•
•
•
•
•
•
Separación de tipos de fecha y hora
Mayor precisión de fracciones de segundo
Mayor rango de datos
Conocimiento de zona horaria
Consecuente y/o equivalente al SQL Estándar
Migración de Base de Datos
– Compatibilidad con soluciones de la competencia
Tipos “Date” y “Time”
Tipo de datos “Date”
• DATE
–
–
–
–
Solo fechas
Gran rango desde 0001-01-01 al 9999-12-31
Tipo estándar de SQL
Tamaño fijo de almacenamiento de 3 bytes
Tipos “Date” y “Time”
Soporte de DATE para cadenas y formatos literales
• Numeric
– mm/dd/yyyy, dd-mm-yyyy, mm.dd.yyyy
• Alphabetical
– mon dd, yyyy
• ISO 8601
– yyyy-mm-dd, yyyymmdd
• ODBC
– {„yyyy-mm-dd‟}
• W3C XML
– yyyy-mm-ddZ
Tipos “Date” y “Time”
Tipo de datos TIME
• TIME(n)
– Solo tiempo
– Precisión opcional asignable por el usuario
• Hasta 100 nanosegundos (por defecto)
• Por defecto alineado con el SO y .NET
– Formato
• HH:MI:SS[.nnnnnnn]
• Se soportan otros
– Tipo de datos SQL Estándar
– Almacenamiento variable de 3 a 5 bytes
Tipos “Date” y “Time”
Tipo de datos con zona horaria
• DATETIMEOFFSET(n)
– Contiene fecha, hora y offset para zona horaria
– Gran rango de datos desde 0001-01-01 a 9999-12-31
– Precisión opcionalmente especificable por el usuario
• Hasta 100 nanosegundos (por defecto)
• Por defecto alineado con el SO y .NET
– Formato
• YYYY-MM-DD HH:MI:SS.[.nnnnnnn][+|-]HH:MI
• Ófsets de zona horaria con rangos desde -14:00 a 14:00
– Tipo equivalente a SQL Estándar
• TIMESTAMP WITH TIME ZONE
– Tamaño de almacenamiento variable de 8 a 10 bytes
Tipos “Date” y “Time”
Interioridades de DATETIMEOFFSET
• Los datos son almacenados como valores UTC
• Se realiza procesamiento como valores UTC
– comparaciones
– ordenación
– indexación
• Se puede devolver la zona horaria original
Tipos “Date” y “Time”
Nuevos tipos date/time mejorados
• DATETIME2(n)
– Gran rango de datos desde 0001-01-01 a 9999-12-31
– Precisión opcionalmente especificable por el usuario
• Hasta 100 nanosegundos (por defecto)
• Por defecto alineado con el SO y .NET
–
–
–
–
–
Equivalente al Estándar SQL (TIMESTAMP)
Tamaño de almacenamiento variable de 6 a 8 bytes
No soporta zona horaria
Alineado con el tipo nativo de .NET DateTime
Reemplazo recomendado de los actuales DateTime y
smalldatetime
Tipos “Date” y “Time”
Nuevos tipos date/time mejorados
• datetime2 soporta los formatos ISO 8601
completamente
– yyyy-mm-dd
– yyyymmdd
• Los “antiguos” DateTime *todavía* no gestionan
yyyy-mm-dd como un formato ISO
– Ten cuidado!
– Realizado para evitar cambios de comportamiento
inesperados
© 2007 Solid Quality Mentors
10
Tipos “Date” y “Time”
Fracciones de segundo
• Por defecto: 100 nanosegundos
– 10-millonésima de segundo
– Alineado con Windows y con DateTime de .NET
• Parámetros de tipo opcional
– Numero de dígitos para la parte fraccional de
segundo
– Puede ser un entero de 0 a 7 (100 nanosegundos)
Tipo de columna
Formato de cadena literal por defecto
Precision
Escala
DATE
YYYY-MM-DD
10
0
TIME
HH:MI:SS [.nnnnnnn]
16
7
DATETIMEOFFSET
YYYY-MM-DD HH:MI:SS[.nnnnnnn][+|-]HH:MI
34
7
DATETIME2
YYYY-MM-DD HH:MI:SS[.nnnnnnn]
27
7
DATETIME2(0)
YYYY-MM-DD HH:MI:SS
19
0
Tipos “Date” y “Time”
Integración en servidor
• Tipo de datos nativo, completamente integrado
– Compatible con todas las funciones (built-in)
– Todas las funcionalidades
• Nuevas partes de fecha añadidas
–
–
–
–
–
DATEADD, DATEDIFF, DATEPART, DATENAME
microsegundos (mcs)
nanosegundos (ns)
TZoffset (tz)
Número de semana ISO 8601
Tipos “Date” y “Time”
Nuevas funciones “built-in”
• Valores del sistema
– SYSDATETIME(), SYSUTCDATETIME()
– SYSDATETIMEOFFSET()
• Consciencia del horario de verano según el SO
• Manipulación del offset de zona horaria
– TODATETIMEOFFSET()
– SWITCHOFFSET()
Tipos “Date” y “Time”
Soporte a bajo nivel en aplicaciones cliente
• Los metadatos son nvarchar o varchar
• Los datos son una cadena de caracteres literal
en formato SQL/ISO
Tipo de columna
Formato por defecto de cadena literal
DATE
YYYY-MM-DD
TIME
HH:MI:SS [.nnnnnnn]
DATETIMEOFFSET
YYYY-MM-DD HH:MI:SS[.nnnnnnn][+|-]HH:MI
DATETIME2
YYYY-MM-DD HH:MI:SS[.nnnnnnn]
Tipos “Date” y “Time”
Funcionalidades avanzadas del servidor
• Soporte completo para xs:dateTime
– Soporte para valores sin zona horaria
– Se puede preservaar el offset de zona horaria
• Soporte para .NET nullable<T> en todos los
tipos nativos
– Ya no hacen falta SqlTypes
– Modelo de programación consistente con el CLR
Tipos “Date” y “Time”
Casos de uso típicos en T-SQL(1)
• Obtener el offset temporal del sistema
SELECT DATENAME(tz, SYSDATETIMEOFFSET()) AS TZ;
TZ
-----------------------------+02:00
• Creación de un tipo de datos atómico: “birthday”
CREATE TYPE birthday FROM DATE NOT NULL;
GO
CREATE TABLE Contact (
ContactID
,
ContactName
,
ContactBirthday
);
int
varchar(100)
birthday
NOT NULL PRIMARY KEY
NOT NULL
NOT NULL
Tipos “Date” y “Time”
Casos de uso típicos en T-SQL(2)
• DATEFORMAT() no afecta a los literales ISO
CREATE TABLE T1 (f1 datetime NOT NULL PRIMARY KEY)
CREATE TABLE T2 (f1 datetime2 NOT NULL PRIMARY KEY)
SET DATEFORMAT ydm
INSERT T1 VALUES ('2007-08-13')
INSERT T2 VALUES ('2007-08-13')
-- esto falla!
• Obtener la fecha y hora actuales del sistema
SELECT SYSDATETIME(), SYSDATETIMEOFFSET(), SYSUTCDATETIME()
DT Function
------------------SYSDATETIME()
SYSDATETIMEOFFSET()
SYSUTCDATETIME()
Result
---------------------------------2007-10-05 00:23:24.1904448 +00:00
2007-10-05 00:23:24.1904448 +02:00
2007-10-04 22:23:24.1904448 +00:00
Tipos “Date” y “Time”
Casos de uso típicos en T-SQL(3)
• Obtener fecha/hora local o UTC datetimeoffset
SELECT
,
TZ
------Local
UTC
CONVERT(datetime2, SYSDATETIMEOFFSET(), 0)
CONVERT(datetime2, SYSDATETIMEOFFSET(), 1);
Result
--------------------------2007-10-05 00:57:27.7188944
2007-10-04 22:57:27.7188944
• Obtener fecha/hora local de una zona horaria
distinta
SELECT
,
SYSDATETIME(), SYSDATETIMEOFFSET()
CONVERT(datetime2
, SWITCHOFFSET(SYSDATETIMEOFFSET(), '+01:00'));
DT Function
------------------SYSDATETIME()
SYSDATETIMEOFFSET()
SWITCHOFFSET(...)
Result
---------------------------------2007-10-05 01:20:38.6990256 +00:00
2007-10-05 01:20:38.6990256 +02:00
2007-10-05 00:20:38.6990256 +00:00
Tipos “Date” y “Time”
Casos de uso típicos T-SQL(4)
• Utilizando CAST/CONVERT con index seek
CREATE TABLE dbo.Search (MyDate datetime2 NOT NULL PRIMARY KEY);
SELECT
FROM
WHERE
MyDate
dbo.Search
MyDate = '09:00:00';
SELECT
FROM
WHERE
MyDate
dbo.Search
CONVERT(time(0), MyDate) = '09:00:00';
SELECT
FROM
WHERE
MyDate
dbo.Search
CONVERT(date, MyDate) = '2007-01-01';
Tipos “Date” y “Time”
Soporte en proveedores cliente
• Completo soporte SNAC (ODBC/OLEDB) en
Katmai
• Completo soporte SqlClient/ADO.NET en Orcas
SQL
ODBC
OLEDB
ADO.NET
DATE
SQL_TYPE_DATE,
SQL_DATE
DBTYPE_DBDATE
DateTime
TIME
SQL_TIME,
SQL_SS_TIME2
DBTYPE_DBTIME,
DBTYPE_DBTIME2
TimeSpan
DATETIMEOFFSET
SQL_SS_TIMESTAMPO
FFSET
DBTYPE_DBTIMESTAMP
OFFSET
DateTimeOffset
DATETIME2
SQL_TYPE_TIMESTAMP DBTYPE_DBTIMESTAMP
, SQL_TIMESTAMP
DateTime
Tipos “Date” y “Time”
Books online
• Nuevos tópicos específicos en CTP4 y
posteriores
– Tipos de datos fecha, hora, y funciones (T-SQL)
– Usando datos fecha y hora
– Mapeo de tipos de datos temporales con consultas
distribuidas
– Utilizando XML con los nuevos tipos de datos de
fecha y hora
DEMO 1
Fecha y hora
© 2007 Solid Quality Mentors
22
Tipos de datos Fecha y Hora
Preguntas y Respuestas
Links de SQL Server 2008
• Site de SQL Server 2008
– http://www.microsoft.com/sql/2008/
• Ejemplos SQL Server 2008
– http://www.codeplex.com/SqlServerSamples
© 2007 Solid Quality Mentors
24
Descargar