Sunteți pe pagina 1din 22

Module 8

Uso de funciones integradas


Temas

• Consultas de escritura con funciones incorporadas


• Uso de funciones de conversión
• Uso de funciones lógicas
• Uso de funciones para trabajar con NULL
Lección 1: Escribir consultas con funciones incorporadas

• Tipos de funciones integradas de SQL Server


• Funciones escalares
• Funciones agregadas
• Funciones de ventana
• Funciones de Rowset
Tipos de funciones integradas de SQL Server

• Las funciones de SQL Server se pueden


clasificar por ámbito de entrada y tipo de
salida:
Function Category Description
Scalar Operar en una sola fila,
devolver un solo valor
Grouped Aggregate Tome uno o más valores,
pero devuelva un solo
valor resumido
Window Operar en una ventana
(conjunto) de filas
Rowset Devolver una tabla
virtual que se puede
utilizar posteriormente
en una instrucción T-SQL
Funciones Escalares

• Operar sobre elementos de una


sola fila como entradas, devuelven Scalar Function
un solo valor como salida Categories

• Devuelve un valor único (escalar) •



Configuration
Conversion
• Se puede utilizar como una • Cursor
• Date and Time
expresión En consultas • Logical
• Mathematical
• Puede ser determinista o no • Metadata
determinista • Security
• String
• La intercalación depende del valor • System
System Statistical
de entrada o de la colación •
• Text and Image
predeterminada de la base de
datos
Funciones de Agregado

• Funciones que funcionan en conjuntos o filas


de datos
• Resuma las filas de entrada
• Sin la cláusula GROUP BY, todas las filas están
dispuestas como un grupo
• Se cubrirá más adelante en el curso

SELECT COUNT(*) AS numorderlines,


SUM(qty*unitprice) AS totalsales
FROM Sales.OrderDetails;

numorderlines totalsales
------------- ----------
2155 56500.91
Funciones de Ventana

• Funciones aplicadas a una ventana o conjunto de


filas
• Incluye funciones de clasificación, desplazamiento,
agregado y distribución
• Se cubrirá más adelante en el curso
SELECT TOP(5) productid, productname, unitprice,
RANK() OVER(ORDER BY unitprice DESC) AS
rankbyprice
FROM Production.Products
ORDER BY rankbyprice;

productid productname unitprice rankbyprice


--------- ------------- --------- -----------
8 Product QDOMO 263.50 1
29 Product VJXYN 123.79 2
9 Product AOZBW 97.00 3
20 Product QHFFP 81.00 4
18 Product CKEDC 62.50 5
Funciones de Rowset

• Devolver un objeto que se puede utilizar como


una tabla en una instrucción T-SQL
• Incluya OPENDATASOURCE, OPENQUERY,
OPENROWSET y OPENXML
• Más allá del alcance de este curso
Lección 2: Uso de las funciones de conversión

• Conversiones de tipos de datos implícitos y


explícitos
• Conversión con CAST
• Conversión con CONVERT
• Conversión de cadenas con PARSE
• Conversión con TRY_PARSE y TRY_CONVERT
Conversiones de tipos de datos implícitos y
explícitos
• La conversión implícita se produce
automáticamente
• Sigue reglas de precedencia de tipo de datos
• Utilizar conversión explícita
• Cuando implícito fallaría o no está permitido
• Para anular la prioridad del tipo de datos

• Convertir explícitamente entre tipos con


funciones CAST o CONVERT
• Cuidado con el truncamiento
Convertir con CAST
• Convierte un valor de un tipo de datos a otro
• Puede utilizarse en cláusulas SELECT y WHERE
• Norma ANSI

Sintaxis de CAST :
CAST(<value> AS <datatype>)

Ejemplo de CAST:
SELECT CAST(SYSDATETIME() AS date);

Devuelve un error si los tipos de datos son


incompatibles :
--attempt to convert datetime2 to int
SELECT CAST(SYSDATETIME() AS int);

Msg 529, Level 16, State 2, Line 1


Explicit conversion from data type datetime2 to int is not allowed.
Convertir con CONVERT
• Convierte un valor de un tipo de datos a otro
• Puede utilizarse en cláusulas SELECT y WHERE
• CONVERT es específico de SQL Server, no basado en
estándares
• Estilo especifica cómo se convierte el valor de
entrada:
• Fecha, hora, numérico, XML y así sucesivamente
• Sintaxis:
CONVERT (<datatype>, <value>, <optional style no.>)

• Ejemplo:
CONVERT(CHAR(8), CURRENT_TIMESTAMP,112) AS ISO_style;

ISO_style
---------
20120212
Conversión de cadenas con PARSE

• PARSE es una nueva función en SQL Server


2012
• Convierte cadenas a tipos de fecha, hora y
número
PARSE element Comment
String_value Formatted nvarchar(4000) input
Data_type Requested data type ouput
Culture Optional string in .NET culture form:
en-US, es-ES, ar-SA, and so on

• Ejemplo PARSE:
SELECT PARSE('02/12/2012' AS datetime2 USING 'en-US') AS
parse_result;
Conversión con TRY_PARSE y TRY_CONVERT

• TRY_PARSE and TRY_CONVERT:


• Nuevo en SQL Server 2012
• Devolver los resultados de una conversión de tipo
de datos
• Al igual que PARSE y CONVERT, convierten las cadenas a
tipos de fecha, hora y numéricos
• A diferencia de PARSE y CONVERT, devuelven un NULL si la
conversión falla
TRY_PARSE Example:
SELECT TRY_PARSE(‘SQLServer' AS datetime2 USING 'en-US') AS
try_parse_result;

try_parse_result
----------------
NULL
Lección 3: Uso de funciones lógicas

• Escribir pruebas lógicas con funciones


• Realización de pruebas condicionales con IIF
• Selección de elementos de una lista con CHOOSE
Escritura de pruebas lógicas con funciones

• ISNUMERIC comprueba si una expresión de


entrada es un tipo de datos numérico válido
• Devuelve un 1 cuando la entrada se evalúa en
cualquier tipo numérico válido, incluyendo FLOAT y
MONEY
• Devuelve 0 de lo contrario

SELECT ISNUMERIC('SQL') AS isnmumeric_result;

isnmumeric_result
-----------------
0

SELECT ISNUMERIC(‘101.99') AS isnmumeric_result;

isnmumeric_result
-----------------
1
Realización de pruebas condicionales con IIF

• IIF devuelve uno de dos valores, dependiendo


de una prueba lógica
• Taquigrafía para una expresión CASE de dos
resultados
IIF Element Comments
Boolean_expression Logical test evaluating to TRUE, FALSE, or
UNKNOWN
True_value Value returned if expression evaluates to
TRUE
False_value Value returned if expression evaluates to
FALSE or UNKNOWN

SELECT productid, unitprice,


IIF(unitprice > 50, 'high','low') AS pricepoint
FROM Production.Products;
Seleccionar elementos de una lista con CHOOSE

• CHOOSE devuelve un elemento de una lista


según lo especificado por un valor de índice
CHOOSE Element Comments
Index Integer that represents position in list
Value_list List of values of any data type to be returned

• CHOOSE ejemplo:
SELECT CHOOSE (3, 'Beverages', 'Condiments', 'Confections') AS choose_result;

choose_result
-------------
Confections
Lección 4: Uso de funciones para trabajar con
NULL

• Conversión de NULL con ISNULL


• Utilizar COALESCE para devolver valores no NULL
• Utilizar NULLIF para devolver NULL si coinciden los
valores
Convirtiendo Nulos con ISNULL

• ISNULL reemplaza NULL con un valor


especificado
• No es estándar; Utilice COALESCE en su lugar
• Sintaxis:
ISNULL Element Comment
expression_to_check Return expression itself if
not NULL
replacement_value Returned if expression
evaluates to NULL
SELECT custid, city, ISNULL(region, 'N/A') AS region, country
FROM Sales.Customers;

custid city region country


----------- --------------- --------------- ---------------
7 Strasbourg N/A France
9 Marseille N/A France
32 Eugene OR USA
43 Walla Walla WA USA
45 San Francisco CA USA
Utilizar COALESCE para devolver valores no NULL

• COALESCE devuelve el primer valor no NULL en una


lista
• Con sólo dos argumentos, COALESCE se comporta como
ISNULL
• Si todos los argumentos son NULL, COALESCE devuelve NULL
• COALESCE está basado en estándares
• Ejemplo:
SELECT custid, country, region, city,
country + ',' + COALESCE(region, ' ') + ', ' + city as location
FROM Sales.Customers;

• Results:
custid country region city location
------ ------- ------ ----------- ----------------------
17 Germany NULL Aachen Germany, , Aachen
65 USA NM Albuquerque USA,NM, Albuquerque
55 USA AK Anchorage USA,AK, Anchorage
83 Denmark NULL Århus Denmark, , Århus
Usar NULLIF para devolver NULL si los valores
coinciden
• NULLIF compara dos expresiones
• Devuelve NULL si ambos argumentos son iguales
• Devuelve el primer argumento si los dos argumentos no son
iguales

emp_id goal actual


1 100 110
2 90 90
3 100 90
4 100 80
SELECT emp_id, NULLIF(actual,goal) AS actual_if_different
FROM dbo.employee_goals;

emp_id actual_if_different
----------- -------------------
1 110
2 NULL
3 90
4 80

S-ar putea să vă placă și