You are on page 1of 21

Módulo 6

Trabajando con los tipos de datos


de SQL Server 2017

Paco Márquez Urbina


pmarquez@sistemasunica.edu.pe
Descripción general del módulo

• Introducción a los tipos de datos de SQL Server


2017
• Trabajando con datos de caracteres
• Trabajando con datos de fecha y hora
Lección 1: Introducción a los tipos de datos de
SQL Server 2017

• Tipos de datos de SQL Server


• Tipos de datos numéricos
• Tipos de datos de cadenas binarias
• Otros tipos de datos
• Precedencia del tipo de datos
• ¿Cuándo se convierten los tipos de datos?
Tipos de datos de SQL Server
• SQL Server asocia columnas, expresiones, variables y
parámetros con tipos de datos
• Los tipos de datos determinan qué tipo de datos se
pueden conservar:
• Enteros, caracteres, fechas, dinero, cadenas binarias, etc.
• SQL Server proporciona tipos de datos incorporados
• Los desarrolladores también pueden definir tipos
personalizados
• Alias en T-SQL
• Tipos definidos por el usuario en el código .NET

Exact numeric Unicode characters


Approximate numeric Binary strings
Date and time Other
Character strings
Tipos de datos numéricos

• Números exactos
Data type Range Storage (bytes)

tinyint 0 to 255 1
smallint -32,768 to 32,768 2
int 2^31 (-2,147,483,648) to 4
2^31-1 (2,147,483,647)
Bigint -2^63 - 2^63-1 8
(+/- 9 quintillion)
bit 1, 0 or NULL 1
decimal/numeric - 10^38 +1 through 10^38 – 1 5-17
when maximum precision is used
money -922,337,203,685,477.5808 to 8
922,337,203,685,477.5807
smallmoney - 214,748.3648 to 214,748.3647 4
Tipos de datos de cadenas binarias

• Cadenas de texto

Data Type Range Storage (bytes)


binary(n) 1-8000 bytes n bytes
varbinary(n) 1-8000 bytes n bytes + 2
varbinary(MAX) 1-2.1 billion (approx) bytes actual length + 2
Otros tipos de datos

Data Type Range Storage Remarks


(bytes)
rowversion Auto-generated 8 Successor type to
timestamp.
uniqueidentifier Auto-generated 16 Globally unique identifier
(GUID).
xml 0-2 GB 0-2 GB Stores XML in native
hierarchical structure.
cursor N/A N/A Not a storage data type.
hierarchyid N/A Depends on Represents position in a
content hierarchy.
sql_variant 0-8000 bytes Depends on Can store data of various
content data types.
table N/A N/A Not a storage data type,
used for query and
programmatic operations.
Precedencia del tipo de datos

• La prioridad del tipo de datos determina qué tipo de


datos se elegirá cuando se combinen expresiones de
diferentes tipos
• El tipo de datos con la precedencia más baja se
convierte al tipo de datos con la precedencia más alta
• Importante para entender las conversiones implícitas
• La conversión al tipo de menor precedencia debe hacerse
explícitamente (con la función CAST)
• Ejemplo (bajo a alto):
• CHAR -> VARCHAR -> NVARCHAR -> TININTINT -> INT ->
DECIMAL -> TIEMPO -> DATE -> DATETIME2 -> XML
¿Cuándo se convierten los tipos de datos?
• Escenarios de conversión de tipos de datos
• Cuando los datos se mueven, se comparan o se
combinan con otros datos
• Durante la asignación de variable

• Conversión implícita
• Al comparar datos de un tipo a otro
• Transparente para el usuario

WHERE <column of smallint type> = <value of int type>


• Conversión explícita
• Utiliza las funciones CAST o CONVERT

CAST(unitprice AS int)

• No todas las conversiones permitidas por SQL


Server
Lección 2: Trabajar con datos de caracteres

• Tipos de datos de caracteres


• Colación
• Concatenación de cadenas
• Funciones de Caracteres de Caracteres
• El predicado LIKE
Tipos de datos de caracteres

• SQL Server admite dos tipos de tipos de datos


de caracteres:
• Regular: CHAR, VARCHAR
• Un byte almacenado por personaje
• Solo 256 caracteres posibles: limita el soporte de idiomas

• Unicode: NCHAR, NVARCHAR


• Dos bytes almacenados por personaje
• 65k caracteres representados - compatibilidad con
múltiples idiomas
• Precede a los personajes con N '(Nacional)
• TEXT, NTEXT obsoleto
• Utilice VARCHAR (MAX), NVARCHAR (MAX) en su
lugar
Colación
• La intercalación es una colección de
propiedades de caracteres
• Idioma admitido, orden de clasificación
• Sensibilidad de caso, sensibilidad de acento

• Al consultar, la conciencia de colación es


importante para la comparación
• ¿La base de datos es sensible a las may
• Si es así, N'Funk '<> N'funk'
• Agregue la opción COLLATE a la cláusula
WHERE para controlar la comparación de
collation
SELECT empid, lastname
FROM HR.employees
WHERE lastname COLLATE Latin1_General_CS_AS =
N'Funk';
Concatenación de cadenas

• SQL Server usa el signo + (más) para


concatenar caracteres:
• Concatenar un valor con un NULL devuelve un NULL

SELECT empid, lastname, firstname,


firstname + N' ' + lastname AS fullname
FROM HR.Employees;

• La función CONCAT
• Convierte NULL en cadena vacía antes de la
concatenación

SELECT custid, city, region, country,


CONCAT(city, ', ' + region, ', ' + country) AS location
FROM Sales.Customers
Funciones de Caracteres de Caracteres

• Funciones comunes que modifican cadenas de


caracteres
Function Syntax Remarks

SUBSTRING() SUBSTRING (expression , start , length) Returns part of an expression.

LEFT(), RIGHT() LEFT (expression , integer_value) LEFT() returns left part of string up
RIGHT (expression , integer_value) to integer_value. RIGHT() returns
right part of string.
LEN(), DATALENGTH() LEN ( string_expression ) LEN() returns the number of
DATALENGTH ( expression ) characters of the specified string
expression, excluding trailing
blanks. DATALENGTH() returns the
number of bytes used.
CHARINDEX() CHARINDEX ( expressionToFind, Searches an expression for
expressionToSearch ) another expression and returns its
starting position if found. Optional
start position.
REPLACE() REPLACE ( string_expression , string_pattern , Replaces all occurrences of a
string_replacement ) specified string value with another
string value.
UPPER(), LOWER() UPPER ( character_expression ) UPPER() returns a character
LOWER ( character_expression ) expression with lowercase
character data converted to
uppercase. LOWER() converts
uppercase to lowercase.
El predicado LIKE

• El predicado LIKE usado para verificar una cadena de


caracteres contra un patrón
• Patrones expresados con símbolos
• % (Por ciento) representa una cadena de cualquier longitud
• _ (Subrayado) representa un solo carácter
• [<Lista de caracteres>] representa un solo carácter dentro de la
lista suministrada
• [<Character> - <character>] representa un solo carácter dentro
del rango especificado
• [^ <Lista o rango de caracteres>] representa un solo carácter que
no está en la lista o rango especificado
• ESCAPE Character le permite buscar un personaje que también sea
un carácter comodín (%, _, [,] por ejemplo)

SELECT categoryid, categoryname, description


FROM Production.Categories
WHERE description LIKE 'Sweet%'
Lección 3: Trabajar con datos de fecha y hora

• Tipos de datos de fecha y hora


• Tipos de datos de fecha y hora: literales
• Trabajando con fecha y hora por separado
• Consulta de valores de fecha y hora
• Funciones de fecha y hora
Tipos de datos de fecha y hora

• Las versiones anteriores de SQL Server solo son


compatibles con DATETIME y SMALLDATETIME
• FECHA, HORA, DATETIME2 y DATETIMEOFFSET introducido
en SQL Server 2008
• SQL Server 2012 agregó funcionalidad adicional para
trabajar con tipos de datos de fecha y hora
Data Type Storage (bytes) Date Range Accuracy Recommended
Entry Format
DATETIME 8 January 1, 1753 to 3-1/3 milliseconds 'YYMMDD
December 31, 9999 hh:mm:ss:nnn'
SMALLDATETIME 4 January 1, 1900 to 1 minute 'YYMMDD
June 6, 2079 hh:mm:ss:nnn'
DATETIME2 6 to 8 January 1, 0001 to 100 nanoseconds 'YYMMDD
December 31, 9999 hh:mm:ss.nnnnnn'
DATE 3 January 1, 0001 to 1 day 'YYYY-MM-DD'
December 31, 9999
TIME 3 to 5 100 nanoseconds 'hh:mm:ss:nnnnnnn'

DATETIMEOFFSET 8 to 10 January 1, 0001 to 100 nanoseconds 'YY-MM-DD


December 31, 9999 hh:mm:ss:nnnnnnn
[+|-]hh:mm'
Tipos de datos de fecha y hora: literales

• SQL Server no ofrece una opción para ingresar un


valor de fecha u hora explícitamente
• Las fechas y las horas se ingresan como literales de
caracteres y se convierten explícita o implícitamente
• Por ejemplo, CHAR convertido a DATETIME debido a la
precedencia
• Los formatos dependen del idioma, pueden causar
confusión
• Mejores prácticas:
• Usar cadenas de caracteres para expresar valores de
fecha y hora
• Use formatos de idioma neutral

SELECT orderid, custid, empid, orderdate


FROM Sales.Orders
WHERE orderdate = '20070825';
Trabajando con fecha y hora por separado

• DATETIME, SMALLDATETIME, DATETIME2 y


DATETIMEOFFSET incluyen datos de fecha y
hora
• Si solo se especifica la fecha, el tiempo se
establece en la medianoche (todos los ceros)
• Si solo se especifica el tiempo, la fecha se
establece en la fecha base (1 de enero de
1900)
DECLARE @DateOnly DATETIME = '20120212';
SELECT @DateOnly;

RESULT
-----------------------
2012-02-12 00:00:00.000
Consulta de valores de fecha y hora

• Los valores de fecha convertidos de literales de


caracteres a menudo omiten tiempo
• Las consultas escritas con operador de igualdad para la
fecha coincidirán con la medianoche
SELECT orderid, custid, empid, orderdate
FROM Sales.Orders
WHERE orderdate = '20070825';

• Si los valores de tiempo se almacenan, las consultas


deben tener en cuenta la hora pasada la
medianoche en una fecha
• Use filtros de rango en lugar de igualdad
SELECT orderid, custid, empid, orderdate
FROM Sales.Orders
WHERE orderdate >= '20070825'
AND orderdate < '20070826';
Funciones de fecha y hora

• Funciones que devuelven la fecha y la hora


actual
Function Return Type Remarks
GETDATE() datetime Current date and time. No time zone
offset.
GETUTCDATE() datetime Current date and time in UTC.
CURRENT_TIMESTAMP() datetime Current date and time. No time zone
offset. ANSI standard.
SYSDATETIME() datetime2 Current date and time. No time zone
offset.
STSUTCDATETIME() datetime2 Current date and time in UTC.
SYSDATETIMEOFFSET() datetimeoffs Current date and time. Includes time
et zone offset.

SELECT CURRENT_TIMESTAMP();
SELECT SYSUTCDATETIME();

You might also like