-
25/03/2010
1
Prof. Marlon S. Ramrez M.
USANDO TRANSACT-SQL
1. Consultas de los datos
2. Funciones SQL (8 hrs)
3. Consultas multi-tablas
4. Grupos y Agregacin
SQL Server - Programacin USANDO TRANSACT-SQL 1
Prof. Marlon S. Ramrez M.
Objetivos
Ayudarles a aprender el mecanismo de utilizar
funciones de todos los tipos.
Introducirlos en las funciones ms comunes de manipulacin
de valores y algunas no tan comunes para mostrar sus
poderosas capacidades
SQL Server - Programacin USANDO TRANSACT-SQL 2
-
25/03/2010
2
Prof. Marlon S. Ramrez M.
Categoras de Funciones - 1Categora Propsito
Agregacin Regresa un valor escalar representando una agregacin
sobre un rango de valores, aplicando una seleccin agregada
especfica o resumen
Conversin Convierte valores de un tipo de datos en otro. Tambin
son usadas para aplicar formato a fechas, horas, y valores
numricos.
Fecha y hora Analizar porciones de fecha y hora de un valor de
fecha, tambin como comparar y manipular valores fecha/hora.
Manipulacin de texto
Usado para analizar, reemplazar y manipular valores en
caracteres
Matemticas Realizar una variedad de operaciones matemticas
comunes y especializadas. til para realizar operaciones
algebraicas, trigonomtricas, estadsticas y financieras
Ranking Resultados enumerados ordenados y valores superiores
SQL Server - Programacin USANDO TRANSACT-SQL 3
Prof. Marlon S. Ramrez M.
Categoras de Funciones - 2Categora Propsito
Metadata Funciones utilitarias que regresan informacin acerca
detalles de configuracin de SQL Server y detalles acerca de la
configuracin del servidor y la base de datos
Seguridad Regresa informacin de rol de miembros y privilegios
para usuarios de SQL Server. Tambin incluye un juego de funciones
para manejar eventos y trazos
Sistema Funcin de utilidad usada para llevar a cabo una variedad
de tareas. Estos incluye comparacin de valores y prueba de tipo de
valores. Esta categora es tambin utilizada para incluir otras
funcionalidades
Estadstica del sistema
Utilidades administrativa usadas para descubrir el uso del
sistema de base de datos e informacin del ambiente
Cursor Bucle a travs de las filas del resultado en manera de
procedimiento.
Configuracin de variables
Regresa informacin sobre el ambiente de ejecucin del SQL Server
que puede ser til en objetos de programacin
SQL Server - Programacin USANDO TRANSACT-SQL 4
-
25/03/2010
3
Prof. Marlon S. Ramrez M.
Caractersticas de un Funcin
Su propsito es regresar un valor
La mayora de las funciones regresan un valor escalar (una unidad
simple de informacin)
Pueden regresar cualquier tipo de dato (incluye tabla y
cursores)
El patrn para llamar funciones es estndar
Result = Function()
En T-SQL , los valores son tpicamente entregados usando la
instruccin SELECT
SELECT Function()
SQL Server - Programacin USANDO TRANSACT-SQL 5
Prof. Marlon S. Ramrez M.
Argumentos de una Funcin
SQL Server - Programacin USANDO TRANSACT-SQL 6
Ejemplos
Pueden tener cualquier nmero
de argumentos donde
Algunos pueden ser requeridos y otros opcionales.
Los argumentos opcionales se
dejan de ltimo en la lista
Los argumento opcionales se les pone corchetes
cuando son definidos
Definicin: CONVERT ( data_type, expression [ , style ] )
Ejemplo 1: SELECT CONVERT(varchar(20), GETDATE())Resultado 'Mar
21 2010 3:26PM'
Ejemplo 2: SELECT CONVERT(varchar(20), GETDATE(), 101)Resultado
'03/21/2010'
-
25/03/2010
4
Prof. Marlon S. Ramrez M.
Funciones segn el Determinismo
Funciones Deterministas
Su salida no depende de factores externos ms que sus parmetros
de entrada
Ejemplos
AVG() (todas las funciones agregadas)
CAST()
CONVERT()
DATEADD()
DATEDIFF()
ASCII()
SUBSTRING()
Funciones no Deterministas
Su salida puede variar basado en algunas condiciones que
producen un resultado aleatorio o dependiente
Ejemplo
GETDATE()
@@ERROR
@@SERVICENAME
CURSORSTATUS()
RAND
SQL Server - Programacin USANDO TRANSACT-SQL 7
Prof. Marlon S. Ramrez M.
Usando variables de usuarios - 1
Usando variables de usuarios con funciones
DECLARE @MyNumber int
SET @MyNumber = 144
SELECT SQRT(@MyNumber)
Usando SET para asignar variables
DECLARE @MyNumber int, @MyResult int
SET @MyNumber = 144
-- Assign the function result to the variable:
SET @MyResult = SQRT(@MyNumber)
-- Return the variable value
SELECT @MyResult
SQL Server - Programacin USANDO TRANSACT-SQL 8
-
25/03/2010
5
Prof. Marlon S. Ramrez M.
Usando variables de usuarios - 2
Usando SELECT para asignar variablesDECLARE @MyNumber1 int,
@MyNumber2 int,
@MyResult1 int, @MyResult2 int
SELECT @MyNumber1 = 144, @MyNumber2 = 121
-- Assign the function result to the variable:
SELECT @MyResult1 = SQRT(@MyNumber1),
@MyResult2 = SQRT(@MyNumber2)
-- Return the variable value
SELECT @MyResult1, @MyResult2
Ojo: Esto no funciona con consulta de datosDECLARE @RestockName
varchar(50)
SELECT ProductId
,@RestockName = Name + : + ProductNumber
FROM Production.Product
SQL Server - Programacin USANDO TRANSACT-SQL 9
Prof. Marlon S. Ramrez M.
Usando funciones en consultas
Funcin insertada en una lista de columna de un SELECT
SELECT
JobTitle
,NationalIdNumber
,YEAR(BirthDate) AS BirthYear
FROM HumanResources.Employee
Funciones AnidadasSELECT
CONVERT(varchar(20), GETDATE(), 101)
SQL Server - Programacin USANDO TRANSACT-SQL 10
-
25/03/2010
6
Prof. Marlon S. Ramrez M.
Funciones Agregadas
Cules fueron las ventas totales de la molleja de pollo por
productos para el mes pasado?
Cul es el precio medio pagado por los condimentos de alimentos
por los brasileos de sexo masculino entre las edades 19 y 24?
Cul fue el ms larga duracin entre la orden y el envo de todos
los pedidos en el ltimo trimestre?
Quin es el empleado ms antiguo que an trabajan en la sala de
correo?
Estas contestan las siguientes preguntas:
SQL Server - Programacin USANDO TRANSACT-SQL 11
Regresa un escalar aplicando una operacin agregada especfica
El valor regresado es comparable con el de la columna o el
resultado de la funcin
Son utilizadas con operaciones de Agrupacin, Roll-up y Pivot que
sern cubiertas ms adelante.
Son tiles cuando se utiliza con un rango de valores de un
resultado de una consulta
No considera los valores nulos
Prof. Marlon S. Ramrez M.
Funcin Agregada Suma: SUM()
Sintaxis:
SUM( [ ALL | DISTINCT ] expresin )
Donde
ALL - Aplica la funcin de agregado a todos los valores. ALL es
el valor predeterminado
DISTINCT - Especifica que AVG se realizar slo en cada caso nico
de un valor, independientemente de cuntas veces el valor se
encuentra
expresin - Es una expresin que regresa un valor numrico, excepto
para el tipo de datos bit. Las funciones de agregado y subconsultas
no estn permitidos.
SQL Server - Programacin USANDO TRANSACT-SQL 12
-
25/03/2010
7
Prof. Marlon S. Ramrez M.
Funcin Agregada Promedio: AVG()
Sintaxis: AVG ( [ ALL | DISTINCT ] expresin )
DondeALL - Aplica la funcin de agregado a todos los valores. ALL
es el valor predeterminado
DISTINCT - Especifica que AVG se realizar slo en cada caso nico
de un valor, independientemente de cuntas veces el valor se
encuentra
expresin - Es una expresin numrica, excepto para el tipo de
datos bit. Las funciones de agregado y subconsultas no estn
permitidos.
PRCTICA 4.1: Ejecute la siguiente consulta usando la funcin AVG
y SUM. Realice los clculos manualmente para comprobar.
SELECT
AVG(VacationHours)as 'Average vacation hours',
SUM(SickLeaveHours) as 'Total sick leave hours'
FROM HumanResources.Employee
WHERE Title LIKE 'Vice President%';
SQL Server - Programacin USANDO TRANSACT-SQL 13
Puede comprobar haciendo un SELECT * a la
tabla sin las funciones para obtener los registros que se estn
procesando
y despus hacer los clculos
Prof. Marlon S. Ramrez M.
Funcin Agregada Cuenta: COUNT() Sintaxis:
COUNT ( { [ [ ALL | DISTINCT ] expresin ] | * } )
DondeALL - Aplica la funcin de agregado a todos los valores. ALL
es el valor predeterminado
DISTINCT - Especifica que COUNT se realizar slo en cada caso
nico de un valor no nulo, independientemente de cuntas veces el
valor se encuentra
expresin - Es una expresin de cualquier tipo, excepto text,
image o ntext. Las funciones de agregado y subconsultas no estn
permitidos.
PRCTICA 4.2:
1. Ejecute la siguiente consulta usando la funcin COUNT con
DISTINCT y sin DISTINCT. Realice los clculos manualmente para
comprobar.
SELECT COUNT(DISTINCT Title)
FROM HumanResources.Employee;
2. Ejecutar para contar todas las filas de una tabla:
SELECT COUNT(*) FROM HumanResources.Employee;
SQL Server - Programacin USANDO TRANSACT-SQL 14
Puede comprobar ejecute un SELECT Title
a la tabla sin la funcin y eliminando nulos y revise cuantas
filas regresa. Repita con
SELECT Title DISTINCT
-
25/03/2010
8
Prof. Marlon S. Ramrez M.
Funcin Agregada Mnimo y Mximo: MIN() y MAX()
Sintaxis:
MAX ( [ ALL | DISTINCT ] expresin )
Donde
ALL - Aplica la funcin de agregado a todos los valores. ALL es
el valor predeterminado
DISTINCT - Especifica que MIN y MAX se realizar slo en cada caso
nico de un valor no nulo, independientemente de cuntas veces el
valor se encuentra. (Esto es irrelevante en este caso)
expresin - Es una expresin de cualquier tipo, excepto tipo bit.
Las funciones de agregado y subconsultas no estn permitidos.
PRCTICA 4.3:
1. Ejecute la siguiente consulta usando la funcin MIN y MAX.
Realice los clculos manualmente para comprobar.
SELECT
MAX(TaxRate)
, MIN(TaxRate)
FROM Sales.SalesTaxRate;
SQL Server - Programacin USANDO TRANSACT-SQL 15
Puede comprobar esto ejecutando un SELECT sobre la tabla
excluyendo los nulos y ordenado por TaxRate. Despus moverse al
primer registro (MIN) y al ltimo registro (MAX)
Prof. Marlon S. Ramrez M.
Funciones de Conversin
Convierte una expresin de un tipo de dato a otro. Se puede
lograr con las funciones CAST() y CONVERT()
Sintaxis: CAST ( expresin AS data_type [ (length ) ])
CONVERT ( data_type [ ( length ) ] , expresin [ , style ] )
Dondeexpresin - Es una expresin vlida
data_type Es el tipo de dato a obtener
length Es un entero opcional que especifica la longitud de el
tipo de dato a obtener. El valor por defecto es 30
style Es un entero que especifica como la funcin CONVERT
formatear la expresin a obtener. Depende del data_type. Ver detalle
a continuacin.
SQL Server - Programacin USANDO TRANSACT-SQL 16
-
25/03/2010
9
Prof. Marlon S. Ramrez M.
Estilos en funcin CONVERTstyle Dgitos
aoFormato
HoraDescripcin Ejemplo
0100
24
12 Por defecto (mon dd yyyy hh:miAM o PM)
Apr 25 05 1:05 PMApr 25 2005 1:05 PM
1101
24
US (mm/dd/yy) 04/25/0504/25/2005
2102
24
ANSI (yy.mm.dd) 05.04.252005.04.25
3103
24
UK/French (dd/mm/yy) 25/04/0525/04/2005
4104
24
German (dd.mm.yy) 25.04.0525.04.2005
12112
24
ISO (yymmdd) 05042520050425
14114
24 Hh:mi:ss:mmm(24h) 13:05:35:123
SQL Server - Programacin USANDO TRANSACT-SQL 17
Prof. Marlon S. Ramrez M.
PRCTICA 4.4: Funciones de Conversin CAST
1. Ejecutar las siguientes instrucciones y analizar el
resultado.
SQL Server - Programacin USANDO TRANSACT-SQL 18
No Instruccin Resultado Esperado
1 SELECT CAST(123 AS int) 123
2 SELECT CAST(123.4 AS int) Error ya que las funciones no hacen
redondeo o truncamiento
3 SELECT CAST(123.4 AS decimal(9,2)) 123.40
4 SELECT CAST(123.4 AS decimal) 123 ya que decimal tiene por
defecto (18,0)
2. Ejecutar las siguientes instruccionesSELECT ProductNumber
+ -+ ProductLine+ -+ ProductModelID AS BikeSerialNum
FROM Production.ProductWHERE ProductSubCategoryID < 4
3. Corregir consulta utilizando un CAST
-
25/03/2010
10
Prof. Marlon S. Ramrez M.
PRCTICA 4.5: Funciones de Conversin CONVERT
1. Ejecutar las siguientes instrucciones y analizar el
resultado.
SQL Server - Programacin USANDO TRANSACT-SQL 19
No Instruccin Resultado Esperado
1 SELECT CONVERT(int, 123) 123 (sin style similar a CAST)
2 SELECT CONVERT(decimal(9,2), 123.4) 123.40 (sin style similar
a CAST)
3 SELECT Default Date: + CONVERT(varchar(50), GETDATE(),
100)
Default Date: Apr 25 2005 1:05PM
4 SELECT US Date: + CONVERT(varchar(50), GETDATE(), 101)
US Date: 04/25/2005
5 SELECT ANSI Date: + CONVERT(varchar(50), GETDATE(), 102)
ANSI Date: 2005.04.25
6 SELECT UK/French Date: + CONVERT(varchar(50), GETDATE(),
103)
UK/French Date: 25/04/2005
Prof. Marlon S. Ramrez M.
Funcin Conversin: STR()
Regresa una cadena de caracteres a partir de un dato
numrico.
Sintaxis: STR ( float_expression [ , length [ , decimal ] ]
)
Dondefloat_expresin - Es una expresin de tipo numrico con un
punto decimal.
length Es la longitud total. Incluye punto decimal, signo,
dgitos y espacios. El valor por defecto es 10
decimal Es el nmero de espacios a la derecha del punto decimal.
decimal >= 16.
PRCTICA 4.6:
1. Ejecutar las siguientes instrucciones y analizar el
resultado.
SQL Server - Programacin USANDO TRANSACT-SQL 20
No Instruccin Resultado Esperado
1 SELECT STR(123.4, 8, 4) '123.4000'
2 SELECT STR(123.456789, 8, 4) '123.4568'
3 SELECT STR(1, 6, 4) '1.0000'
4 SELECT STR(1, 12, 4) ' 1.0000'
-
25/03/2010
11
Prof. Marlon S. Ramrez M.
Funciones de Fecha
Funciones DATEADD y DATEDIFFDATEDIFF ( datepart , startdate ,
enddate )
Regresa un entero con el resultado de la resta de enddate menos
startdate. El resultado se muestra segn tipo de medida de tiempo
especificado en datepart.
DATEADD (datepart , number, date )
A date se la suma la cantidad especificada en number segn el
tipo de medida de tiempo especificado en datepart.
startdate, enddate y date son valores del tipo time, date,
smalldatetime, datetime, datetime2, o datetimeoffset. Tambin pueden
ser una expresin, variable definida por usuario o una cadena de
caracteres.
number es un entero.
Valores vlidos de datepart
En parntesis abajo los argumentos vlidos para datepart
Ao (yy, yyyy, year),
trimestre (qq, q, quarter),
mes (mm, m, month),
da del ao (dy, y,DayOfYear),
da (dd, d, Day),
semana (wk, ww,Week),
hora (hh, Hour),
minuto (mi, n, Minute),
segundo (ss, s, Second),
milisegundo (ms), Millisecond,
SQL Server - Programacin USANDO TRANSACT-SQL 21
Prof. Marlon S. Ramrez M.
PRCTICA 4.7: Las funciones DATEADD y DATEDIFF
Ejecute las siguientes consultas1. Determinar la fecha 90 das
despus del 29/04/1988
SELECT DATEADD(Day, 90, '4-29-1988')
2. Determinar la fecha 18 aos despus del 29/04/1988SELECT
DATEADD(Year, 18, '4-29-1988 10:30 AM')
3. Determinar la fecha 18 aos antes del 29/04/1988SELECT
DATEADD(yy, -18, '4-29-1988 10:30 AM')
4. Combinar las funciones CONVERT y DATEADD para formatear el
resultado de nueve meses antes del 8/9/1989
SELECT CONVERT(varchar(20), DATEADD(m, 9, 9-8-1989'), 101)
5. Cual es la diferencia entre 9-8-1989 y 10-17-1989 en meses,
das y semana
SELECT DATEDIFF(month, 9-8-1989, 10-17-1991)
SELECT DATEDIFF(day, 9-8-1989, 10-17-1991)
SELECT DATEDIFF(week, 9-8-1989, 10-17-1991)
SQL Server - Programacin USANDO TRANSACT-SQL 22
-
25/03/2010
12
Prof. Marlon S. Ramrez M.
Otras funciones de fecha
PRCTICA 4.8: Ejecutar los ejemplos con diferentes funciones de
fecha.
SQL Server - Programacin USANDO TRANSACT-SQL 23
Funcin Descripcin Ejemplo Resultado esperado
DATEPART Regresa un entero representando parte de la fecha
SELECT DATEPART(month, 4-29-1988) 4
DATENAME Regresa un nombre descriptivo representando parte de la
fecha
SELECT DATENAME(month, 4-29-1988) April
GETDATE() Fecha y hora actual SELECT GETDATE() Fecha actual
GETUTCDATE() Fecha y hora actual en el meridiano de
Greenwich
SELECT GETUTCDATE()
SELECT DATEDIFF(hour, GETDATE(), GETUTCDATE())
Fecha actual ms 6 horas
6
DAY (), MONTH (), and YEAR ()
Regrese el da, mes o ao de una expresin de fecha
SELECT Year: + CONVERT(varchar(4) , YEAR(GETDATE())) + , Month:
+ CONVERT(varchar(2), MONTH(GETDATE()))+ , Day: +
CONVERT(varchar(2), DAY(GETDATE()))
Year: 2010, Month: 3, Day: 27
Prof. Marlon S. Ramrez M.
Funciones de Manipulacin de Cadenas de caracteres
Son usadas para analizar, reemplazar y manipular valores de
caracteres. Iniciamos con cuatro funciones similares para convertir
un carcter a
diferentes representaciones de diferentes industrias
PRCTICA 4.9: Ejecutar los ejemplos con diferentes funciones para
convertir un carcter
SQL Server - Programacin USANDO TRANSACT-SQL 24
Funcin Descripcin Ejemplo Resultado esperado
ASCII() Para obtener el cdigo ASCII de un carcter.
SELECT ASCII(A) 65
CHAR() Para convertir el cdigo ASCII en un carcter.
SELECT CHAR(65) A
UNICODE() Para obtener el cdigo UNICODE de un carcter.
SELECT UNICODE() 233
NCHAR() Para convertir el cdigo UNICODE en un carcter.
SELECT NCHAR(233)
-
25/03/2010
13
Prof. Marlon S. Ramrez M.
Funciones CHARINDEX() y PATINDEX
CHARINDEX( expression1 ,expression2 [ , start_location ] )
Argumentos expression1 es una expresin de
caracteres expression2 es una expresin de
caracteres a buscar. start_location es un entero que indica
la posicin donde empieza la bsqueda
PRCTICA 4.10a: Ejecute las instrucciones una a una y analice el
resultado.
DECLARE @document varchar(64)
SELECT @document =
'Reflectors are vital safety' +
' components of your bicycle.'
SELECT CHARINDEX('bicycle', @document)
SELECT CHARINDEX('vital', @document, 5)
SELECT CHARINDEX('bike', @document)
PATINDEX ( '%pattern%' , expression )
Argumentos
pattern es una expresin de caracteres a buscar. Puede utilizar
comodines pero debe escribir el carcter % antes y despus.
expression es la expresin donde se busca
PRCTICA 4.10b: Ejecute las instrucciones una a una y analice el
resultado.
SELECT
PATINDEX('%ensure%', DocumentSummary)
FROM Production.Document
WHERE DocumentID = 3;
SELECT
PATINDEX('%en_ure%', DocumentSummary)
FROM Production.Document
WHERE DocumentID = 3;
SQL Server - Programacin USANDO TRANSACT-SQL 25
Prof. Marlon S. Ramrez M.
Otras funciones con texto - 1
Funcin Descripcin Ejemplo
LEN(Expresin)
Devuelve el nmero de caracteres de la expresin de cadena
especificada, exceptuando espacios en blanco en los extremos en
Numero Caracteres.
SELECT LEN('FirstName')
Resultado=9
LEFT(expresin,
NumeroCaracteres)
Devuelve la parte izquierda de una cadena de caracteres con el
nmero de caracteres especificado en Numero Caracteres.
SELECT
LEFT('FirstName,5)
Resultado=First
RIGHT(expresin,
NumeroCaracteres)
Devuelve la parte derecha de una cadena de caracteres con el
nmero de caracteres especificado en Numero Caracteres.
SELECT
RIGHT('FirstName,4)
Resultado=Name
SUBSTRING(expresin, inicioParte,
NumeroCaracteres)
Devuelve una parte de una cadena de caracteres a partir de
inicioParte con elnmero de caracteres especificado en Numero
Caracteres.
SELECT
SUBSTRING('FirstName,2
,4)
Resultado=irst
SQL Server - Programacin USANDO TRANSACT-SQL 26
PRCTICA 4.11a: Ejecute las instrucciones ejemplos y compruebe el
resultado.
-
25/03/2010
14
Prof. Marlon S. Ramrez M.
Otras funciones con texto - 2
Funcin Descripcin Ejemplo
LTRIM(expresin)
Devuelve una expresin de caracteres despus de que quita espacios
a la izquierda.
SELECT
LTRIM( FirstName )
Resultado=FirstName
RTRIM(expresin)
Devuelve una expresin de caracteres despus de que quita espacios
a la derecha.
SELECT
RTRIM( FirstName )
Resultado= FirstName
LOWER(expresin)
Devuelve una expresin de caracteres tras convertir los datos de
caracteres a minsculas.
SELECT LOWER('FirstName')
Resultado=firstname
UPPER(expresin)
Devuelve una expresin de caracteres tras convertir los datos de
caracteres a maysculas.
SELECT UPPER('FirstName')
Resultado=FIRSTNAME
REPLACE(expresin,
buscar, reemplazar)
Reemplaza todas las ocurrencias de un valor de cadena
especificado (buscar) con otro valor de cadena (reemplazar).
SELECT
REPLACE('abcdefghicde','c
de','xxx')
Resultado=abxxxfghixxx
SQL Server - Programacin USANDO TRANSACT-SQL 27
PRCTICA 4.11b: Ejecute las instrucciones ejemplos y compruebe el
resultado.
Prof. Marlon S. Ramrez M.
Otras funciones con texto 3
Funcin Descripcin Ejemplo
REPLICATE(expresin,
VecesaRepetir)
Repite un valor de cadena de un nmero determinado de veces.
SELECT REPLICATE(0',4) +
F
Resultado=0000F
SPACE(EspaciosaRepetir)
Devuelve una cadena de espacios repetidos
SELECT SPACE(4) + F
Resultado= F
REVERSE(expresin)
Devuelve el reverso de una expresin de caracteres
SELECT
REVERSE('FirstName')
Resultado=emaNtsriF
STUFF(Expresin,inicioParte,
NumeroCaracteres)
Inserta una cadena en otra cadena. Elimina CantidadCaracteres
caracteres a partir de la posicin InicioParte y luego inserta la
segunda cadena en la primera cadena en la posicin inicial
(InicioParte).
SELECT
STUFF('abcdef', 2, 3,
'ijklmn')
Resultado=aijklmnef
QUOTENAME() Devuelve una cadena Unicode con los delimitadores
aadidos para hacer la cadena de entrada un Identificador vlido.
SELECT
QUOTENAME('FirstName')
Resultado=[FirstName]
SQL Server - Programacin USANDO TRANSACT-SQL 28
PRCTICA 4.11c: Ejecute las instrucciones ejemplos y compruebe el
resultado.
-
25/03/2010
15
Prof. Marlon S. Ramrez M.
Funciones Matemticas - 1 Funcin Descripcin
ABS() Devuelve el valor absoluto de un valor numrico.
ACOS() Calcula el arco coseno (ngulo) en radianes.
ASIN() Calcula el arco seno (ngulo) en radianes.
ATAN() Calcula el arco tangente (ngulo) en radianes.
ATN2() Calcula el arcotangente de dos valores en radianes.
CEILING() Devuelve el valor entero ms pequeo que es mayor o
igual a un nmero
COS () Calcula el coseno de un ngulo en radianes.
COT () Calcula la cotangente de un ngulo en radianes
DEGREES () Convierte un ngulo de radianes a grados.
EXP () Devuelve el logaritmo natural elevado a un exponente
especificado.
FLOOR() Devuelve el valor ms grande PISO entero que es menor o
igual a un nmero.
LOG () Calcula el logaritmo natural de un nmero usando la base -
2 (binario) de numeracin.
SQL Server - Programacin USANDO TRANSACT-SQL 29
Prof. Marlon S. Ramrez M.
Funciones Matemticas - 2
Funcin Descripcin
LOG10 () Calcula el logaritmo natural de un nmero usando la base
- 10 de numeracin.
PI () Devuelve el valor de PI () como un nmero flotante.
POWER () Eleva un valor a un exponente especificado.
RADIANES () Convierte un ngulo de grados a radianes.
RAND () Devuelve un nmero fraccionario basado en un algoritmo
aleatorio. Acepta un valor de inicializacin opcional.
ROUND () Redondea un valor fraccionario con una precisin
especificada.
SIGN () Retorna -1 o 1, dependiendo de si un valor nico
argumento es negativo opositivo.
SIN () Calcula el seno de un ngulo en radianes.
SQRT () Devuelve la raz cuadrada de un valor.
SQUARE () Devuelve el cuadrado (N2) de un valor.
TAN () Calcula la tangente de un ngulo en radianes.
SQL Server - Programacin USANDO TRANSACT-SQL 30
-
25/03/2010
16
Prof. Marlon S. Ramrez M.
PRCTICA 4.12: Ejemplo de Funciones Matemticas
1. Ejecute los siguientes ejemplos y compruebe los
resultados
a) CEILING
SELECT
CEILING($123.45),
CEILING($-123.45),
CEILING($0.0)
Resultado = 124.00 -123.00 0.00
b) FLOOR
SELECT
FLOOR($123.45),
FLOOR($-123.45),
FLOOR($0.0)
Resultado = 123.00 -124.00 0.00
c) RAND
DECLARE @counter smallint;
SET @counter = 1;
WHILE @counter < 5
BEGIN
SELECT
RAND() Random_Number
SET @counter = @counter + 1
END;
SQL Server - Programacin USANDO TRANSACT-SQL 31
Prof. Marlon S. Ramrez M.
La funcin ROUND
ROUND ( numeric_expression , length [ ,function ]
)Argumentos
Numeric_expression es una expresin numrica
length es la precisin con la cual la expresin numrica se va a
redondear. Si es positivo redondea la parte decimal y negativo la
parte entera.
function es cero para redondear y 1 para truncar. Si es omitido
redondea.
PRCTICA 4.13: Ejecutar los ejemplos con la funcin ROUND
SQL Server - Programacin USANDO TRANSACT-SQL 32
Ejemplo Resultado
SELECT ROUND(748.58, -1) 750.00
SELECT ROUND(748.58, -2) 700.00
SELECT ROUND(123.9994, 3) 123.9990
SELECT ROUND(123.9995, 3) 124.0000
SELECT ROUND(150.75, 0) 151.00
SELECT ROUND(150.75, 0, 1) 150.00
-
25/03/2010
17
Prof. Marlon S. Ramrez M.
Funciones de Ranking
SQL Server - Programacin USANDO TRANSACT-SQL 33
Funcin Descripcin
ROW_NUMBER() Devuelve el nmero secuencial de una fila de una
particin de un conjunto de resultados, a partir de 1 para la
primera fila de cada particinROW_NUMBER ( ) OVER ( [ ] )
RANK() Devuelve el rango de cada fila dentro de la particin de
un conjunto de resultados. El rango de una fila es uno ms el nmero
de filas que se presentan a la fila en cuestin.RANK ( ) OVER ( [ ]
)
DENSE_RANK() Devuelve el rango de filas dentro de la particin de
un conjunto de resultados, sin ningn tipo de lagunas en el ranking.
El rango de una fila es uno ms el nmero de rangos distintos que se
presentan a la fila en cuestin.DENSE_RANK ( ) OVER ( [ ] )
NTILE(n) Distribuye las filas de una particin ordenada en un
nmero determinado de grupos. Los grupos estn contados, a partir de
uno. Para cada fila, NTILE devuelve el nmero del grupo al que
pertenece la fila.NTILE (n ) OVER ( [ ] )
Prof. Marlon S. Ramrez M.
PRCTICA 4.14a: Funciones de Ranking
1. Ejecutar cada una de las instrucciones y analizar
resultadosSELECT
i.ProductID, p.Name, i.LocationID , i.Quantity
,ROW_NUMBER() OVER ( ORDER BY i.LocationID DESC) AS
'ROW_NUMBER'
FROM Production.ProductInventory i
INNER JOIN Production.Product p ON i.ProductID = p.ProductID
WHERE LocationID IN (3, 4)
ORDER BY i.LocationID DESC
2. Aadir columna RANK, ejecutar y comparar resultados,RANK()
OVER ( ORDER BY i.LocationID DESC) AS 'RANK'
3. Aadir columna DENSE_RANK, ejecutar y comparar
resultados,DENSE_RANK() OVER ( ORDER BY i.LocationID DESC) AS
'DENSE_RANK'
4. Aadir columna NTILE, ejecutar y comparar resultados,NTILE(3)
OVER ( ORDER BY i.LocationID DESC) AS 'NTILE'
SQL Server - Programacin USANDO TRANSACT-SQL 34
-
25/03/2010
18
Prof. Marlon S. Ramrez M.
PRCTICA 4.14b: Funciones de Ranking con PARTITION
1. Ejecutar cada una de las instrucciones y analizar
resultadosSELECT
i.ProductID, p.Name, i.LocationID , i.Quantity
,ROW_NUMBER() OVER (PARTITION BY i.LocationID
ORDER BY i.Quantity DESC) AS ROW_NUMBER
FROM Production.ProductInventory i
INNER JOIN Production.Product p ON i.ProductID = p.ProductID
WHERE LocationID IN (3, 4)
ORDER BY i.LocationID, i.Quantity DESC
2. Aadir columna RANK, ejecutar y comparar resultados,RANK()
OVER (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS
'RANK'
3. Aadir columna DENSE_RANK, ejecutar y comparar
resultados,DENSE_RANK() OVER (PARTITION BY i.LocationID
ORDER BY i.Quantity DESC) AS 'DENSE_R'
4. Aadir columna NTILE, ejecutar y comparar resultados,NTILE(2)
OVER (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS
'NTILE'
SQL Server - Programacin USANDO TRANSACT-SQL 35
Prof. Marlon S. Ramrez M.
Resultados de Ranking con PARTITION
SQL Server - Programacin USANDO TRANSACT-SQL 36
ID Name LocID Quantity ROW_NUMBER RANK DENSE_RANK NTILE
494 Paint - Silver 3 49 1 1 1 1
495 Paint - Blue 3 49 2 1 1 1
493 Paint - Red 3 41 3 3 2 1
496 Paint - Yellow 3 30 4 4 3 2
492 Paint - Black 3 17 5 5 4 2
495 Paint - Blue 4 35 1 1 1 1
496 Paint - Yellow 4 25 2 2 2 1
493 Paint - Red 4 24 3 3 3 1
492 Paint - Black 4 14 4 4 4 2
494 Paint - Silver 4 12 5 5 5 2
-
25/03/2010
19
Prof. Marlon S. Ramrez M.
Funcin del Sistema: COALESCE()
PRCTICA 4.15: Funcin COALESCE devuelve el primer valor no-nulo
de una lista delimitada por comas.
1. Ejecutar comando para crear la tabla ProductPricesCREATE
TABLE #ProductPrices (ProductName varchar(25), SuperSalePrice
Money
NULL, SalePrice Money NULL, ListPrice Money NULL)
2. Ejecutar comandos para llenar la tablaINSERT INTO
#ProductPrices VALUES(Standard Widget, NULL, NULL, 15.95)
INSERT INTO #ProductPrices VALUES(Economy Widget, NULL, 9.95,
12.95)
INSERT INTO #ProductPrices VALUES(Deluxe Widget, 19.95, 20.95,
22.95)
INSERT INTO #ProductPrices VALUES(Super Deluxe Widget, 29.45,
32.45, 38.95)
INSERT INTO #ProductPrices VALUES(Executive Widget, NULL, 45.95,
54.95)
3. Ejecutar el SELECT con COALESCE y revisar resultadosSELECT
ProductName, SuperSalePrice, SalePrice, ListPrice ,
COALESCE(SuperSalePrice, SalePrice, ListPrice) AS
CurrentPrice
FROM #ProductPrices
4. COALESCE tambin puede utilizarse para poner un valor por
defecto cuando se tiene un valor nulo. Ejecutar y revisar
resultadosSELECT ProductName, SuperSalePrice, SalePrice, ListPrice
,
COALESCE(SuperSalePrice, 0) AS CurrentPrice
FROM #ProductPrices
SQL Server - Programacin USANDO TRANSACT-SQL 37
Prof. Marlon S. Ramrez M.
Variable del Sistema: DATALENGTH()
PRCTICA 4.16: Funcin DATALENGTH devuelve el nmero de bytes
utilizados para representar cualquier expresin
1. Ejecutar comando y revisar resultadoDECLARE @Value
varchar(20)
SET @Value = abc
SELECT
DATALENGTH(@Value)
, LEN(@Value)
2. Ejecutar comando y comparar resultado de DATALENGTH vs
LEN()DECLARE @Value1 int, @Value2 int
SET @Value1 = 2
SET @Value2 = 2000000000
SELECT
DATALENGTH(@Value1)
, LEN(@Value1)
, DATALENGTH(@Value2)
, LEN(@Value2)
SQL Server - Programacin USANDO TRANSACT-SQL 38
-
25/03/2010
20
Prof. Marlon S. Ramrez M.
Ejercicios 1/3
Ejercicio 4.1: Escribir una consulta para devolver el peso
promedio de todas las bicicletas de paseo (touring bike) vendido
por Adventure Works Cycles que lista de ms de $ 2.500. Utilice la
tabla ProductSubCategory para determinar cmo se debe filtrar estas
productos.
Ejercicio 4.2: Designar a una variable llamada @ProCount para
contener el nmero de registros de productos almacenados. Ejecutar
una consulta para devolver este valor y asignarlo a la variable.
Utilice la variable en una expresin para devolver el valor en la
frase "Hay X productos almacenados. "
Ejercicio 4.3: Calcular la raz cuadrada del valor absoluto del
coseno del PI
Ejercicio 4.4: Cuntos das ha pasado desde la firma del Tratado
de Versalles el 28 de junio de 1919, que termin la Segunda Guerra
Mundial 1? Calcular la respuesta usando T SQL
Ejercicio 4.5: Con la tabla Person.Contact, devuelva el Nombre,
Apellidos, y los dos letras iniciales de todos los empleados.
SQL Server - Programacin USANDO TRANSACT-SQL 39
Prof. Marlon S. Ramrez M.
Ejercicios 2/3Ejercicio 4.6: Escriba y ejecute un cdigo para
obtener el da de la semana en que
una orden fue puesta, ordenar por el da de la semana. Utilizar
tabla [Sales.SalesOrderHeader] e incluir la columna
[SalesOrderID].
Ejercicio 4.7: Escriba y ejecute un cdigo para obtener el nmero
de das que pasaron entre cuando la orden fue puesta y cuando fue
embarcada (shipped). Utilizar tabla [Sales.SalesOrderHeader] e
incluir la columna [SalesOrderID].
Ejercicio 4.8: Escriba y ejecute un cdigo para obtener el nmero
de das que pasaron entre cuando la orden fue puesta y cuando fue
embarcada (shipped). Utilizar tabla [Sales.SalesOrderHeader] e
incluir la columna [SalesOrderID].
Ejercicio 4.9: Escriba y ejecute un cdigo para obtener una
columna llamada [Employee Code] que es hecha de los tres primeros
caracteres del nombre y apellido de un empleado. Utilizar tabla
[Person.Contact].
SQL Server - Programacin USANDO TRANSACT-SQL 40
-
25/03/2010
21
Prof. Marlon S. Ramrez M.
Ejercicios 3/3Ejercicio 4.10: Escriba y ejecute un cdigo para
reemplazar la palabra bike con la
palabra BICICLETA en todos la descripcin de los productos. Para
visualizar los resultados filtre solo los registros cuya descripcin
contiene la palabra bike. Utilizar tabla
[Product.ProductDescription].
Ejercicio 4.11: Escriba y ejecute un cdigo para obtener el
nombre del empleado, su apellido y su nmero [ContactID] en una sola
columna. Para lograr esto debe convertir [ContactID] a carcter.
Incluya un espacio entre cada columna que esta concatenando.
Utilizar tabla [Person.Contact].
Ejercicio 4.12: Escriba y ejecute un cdigo para obtener una
columna con el precio de lista [ListPrice] a 8 caracteres enteros y
2 decimales. Si el nmero entero tiene menos de 8 dgitos rellene con
0 a las izquierda. No incluya los registros cuando el precio de
lista es cero o nulo. Utilizar tabla [Product.Product].
SQL Server - Programacin USANDO TRANSACT-SQL 41