Você está na página 1de 21

25/03/2010

Prof. Marlon S. Ramrez M.

1.
2.
3.
4.

Consultas de los datos


Funciones SQL (8 hrs)
Consultas multi-tablas
Grupos y Agregacin

USANDO TRANSACT-SQL

SQL Server - Programacin

USANDO TRANSACT-SQL

Prof. Marlon S. Ramrez M.

Objetivos

Ayudarles a aprender el
mecanismo de utilizar
funciones de todos los tipos.

SQL Server - Programacin

Introducirlos en las funciones


ms comunes de manipulacin
de valores y algunas no tan
comunes para mostrar sus
poderosas capacidades

USANDO TRANSACT-SQL

25/03/2010

Prof. Marlon S. Ramrez M.

Categoras de Funciones - 1
Categora

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

Prof. Marlon S. Ramrez M.

Categoras de Funciones - 2
Categora

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

25/03/2010

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

Prof. Marlon S. Ramrez M.

Argumentos de una Funcin


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

Ejemplos
Definicin:
Ejemplo 1:
Ejemplo 2:

SQL Server - Programacin

CONVERT ( data_type, expression [ , style ] )


SELECT CONVERT(varchar(20), GETDATE())
Resultado

'Mar 21 2010 3:26PM'


SELECT CONVERT(varchar(20), GETDATE(), 101)
Resultado

'03/21/2010'
USANDO TRANSACT-SQL

25/03/2010

Prof. Marlon S. Ramrez M.

Funciones segn el Determinismo


Funciones Deterministas

Funciones no Deterministas

Su salida no depende de factores


externos ms que sus parmetros de
entrada

Su salida puede variar basado en algunas


condiciones que producen un resultado
aleatorio o dependiente

Ejemplos

Ejemplo

AVG() (todas las funciones agregadas)


CAST()
CONVERT()
DATEADD()
DATEDIFF()
ASCII()
SUBSTRING()

GETDATE()
@@ERROR
@@SERVICENAME
CURSORSTATUS()
RAND

SQL Server - Programacin

USANDO TRANSACT-SQL

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

25/03/2010

Prof. Marlon S. Ramrez M.

Usando variables de usuarios - 2


Usando SELECT para asignar variables
DECLARE
@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 datos


DECLARE @RestockName varchar(50)
SELECT ProductId
,@RestockName = Name + : + ProductNumber
FROM Production.Product
SQL Server - Programacin

USANDO TRANSACT-SQL

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 Anidadas
SELECT
CONVERT(varchar(20), GETDATE(), 101)

SQL Server - Programacin

USANDO TRANSACT-SQL

10

25/03/2010

Prof. Marlon S. Ramrez M.

Funciones Agregadas
Estas contestan las siguientes preguntas:
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?

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
SQL Server - Programacin

USANDO TRANSACT-SQL

11

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

Prof. Marlon S. Ramrez M.

Funcin Agregada Promedio: AVG()

Sintaxis:

Donde

AVG ( [ ALL | DISTINCT ] expresin )


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 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

Puede comprobar
haciendo un SELECT * a la
tabla sin las funciones
para obtener los registros
que se estn procesando
y despus hacer los
clculos

USANDO TRANSACT-SQL

13

Prof. Marlon S. Ramrez M.

Funcin Agregada Cuenta: COUNT()

Sintaxis:

Donde

COUNT ( { [ [ ALL | DISTINCT ] expresin ] | * } )


ALL - 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

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
14

25/03/2010

Prof. Marlon S. Ramrez M.

Funcin Agregada Mnimo y Mximo:


MIN() y MAX()

Sintaxis:

Donde

MAX ( [ ALL | DISTINCT ] expresin )


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

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)
USANDO TRANSACT-SQL

15

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 ] )

Donde
expresin - 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

Prof. Marlon S. Ramrez M.

Estilos en funcin CONVERT


style

Dgitos
ao

Formato
Hora

Descripcin

Ejemplo

0
100

2
4

12

Por defecto
(mon dd yyyy hh:miAM o PM)

Apr 25 05 1:05 PM
Apr 25 2005 1:05 PM

1
101

2
4

US (mm/dd/yy)

04/25/05
04/25/2005

2
102

2
4

ANSI (yy.mm.dd)

05.04.25
2005.04.25

3
103

2
4

UK/French (dd/mm/yy)

25/04/05
25/04/2005

4
104

2
4

German (dd.mm.yy)

25.04.05
25.04.2005

12
112

2
4

ISO (yymmdd)

050425
20050425

Hh:mi:ss:mmm(24h)

13:05:35:123

14
114

24

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.


No Instruccin

Resultado Esperado

SELECT CAST(123 AS int)

123

SELECT CAST(123.4 AS int)

Error ya que las funciones no


hacen redondeo o truncamiento

SELECT CAST(123.4 AS decimal(9,2))

123.40

SELECT CAST(123.4 AS decimal)

123 ya que decimal tiene por


defecto (18,0)

2.

Ejecutar las siguientes instrucciones

3.

Corregir consulta utilizando un CAST

SELECT ProductNumber
+ -
+ ProductLine
+ -
+ ProductModelID AS BikeSerialNum
FROM Production.Product
WHERE ProductSubCategoryID < 4

SQL Server - Programacin

USANDO TRANSACT-SQL

18

25/03/2010

Prof. Marlon S. Ramrez M.

PRCTICA 4.5: Funciones de Conversin CONVERT


1.

Ejecutar las siguientes instrucciones y analizar el resultado.


No

Instruccin

Resultado Esperado

SELECT CONVERT(int, 123)

123 (sin style similar a


CAST)

SELECT CONVERT(decimal(9,2), 123.4)

123.40 (sin style similar


a CAST)

SELECT Default Date: +


CONVERT(varchar(50), GETDATE(), 100)

Default Date: Apr 25


2005 1:05PM

SELECT US Date: +
CONVERT(varchar(50), GETDATE(), 101)

US Date: 04/25/2005

SELECT ANSI Date: +


CONVERT(varchar(50), GETDATE(), 102)

ANSI Date: 2005.04.25

SELECT UK/French Date: +


CONVERT(varchar(50), GETDATE(), 103)

UK/French Date:
25/04/2005

SQL Server - Programacin

USANDO TRANSACT-SQL

19

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 ] ] )

Donde
float_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.
No Instruccin

Resultado Esperado

SELECT STR(123.4, 8, 4)

'123.4000'

SELECT STR(123.456789, 8, 4)

'123.4568'

SELECT STR(1, 6, 4)

'1.0000'

SELECT STR(1, 12, 4)

'

SQL Server - Programacin

USANDO TRANSACT-SQL

1.0000'
20

10

25/03/2010

Prof. Marlon S. Ramrez M.

Funciones de Fecha
Funciones DATEADD y DATEDIFF

Valores vlidos de datepart

DATEDIFF ( 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.

En parntesis abajo los argumentos


vlidos para 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.

SQL Server - Programacin

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,

USANDO TRANSACT-SQL

21

Prof. Marlon S. Ramrez M.

PRCTICA 4.7: Las funciones DATEADD y DATEDIFF


Ejecute las siguientes consultas
1. 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/1988

3.

Determinar la fecha 18 aos antes del 29/04/1988

4.

Combinar las funciones CONVERT y DATEADD para formatear el


resultado de nueve meses antes del 8/9/1989

5.

Cual es la diferencia entre 9-8-1989 y 10-17-1989 en meses, das y


semana

SELECT DATEADD(Year, 18, '4-29-1988 10:30 AM')


SELECT DATEADD(yy, -18, '4-29-1988

10:30 AM')

SELECT CONVERT(varchar(20), DATEADD(m, 9, 9-8-1989'), 101)

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

11

25/03/2010

Prof. Marlon S. Ramrez M.

Otras funciones de fecha


PRCTICA 4.8: Ejecutar los ejemplos con diferentes funciones de fecha.
Funcin

Descripcin

Ejemplo

Resultado
esperado

DATEPART

Regresa un entero
representando parte de la
fecha

SELECT DATEPART(month, 4-29-1988)

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

Fecha y hora actual en el


meridiano de Greenwich

SELECT GETUTCDATE()

Fecha actual ms 6
horas

GETUTCDATE()

SELECT DATEDIFF(hour, GETDATE(), GETUTCDATE())


6
DAY (),
MONTH (),
and YEAR ()

Regrese el da, mes o ao


de una expresin de fecha

SQL Server - Programacin

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

USANDO TRANSACT-SQL

23

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
Funcin

Descripcin

Ejemplo

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)

UNICODE() Para obtener el cdigo UNICODE de


un carcter.
NCHAR()

Para convertir el cdigo UNICODE en


un carcter.

SQL Server - Programacin

Resultado
esperado

SELECT UNICODE()

233

SELECT NCHAR(233)

USANDO TRANSACT-SQL

24

12

25/03/2010

Prof. Marlon S. Ramrez M.

Funciones CHARINDEX() y PATINDEX


CHARINDEX( expression1
,expression2 [ , start_location ] )

PATINDEX ( '%pattern%' ,
expression )

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

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.10a: Ejecute las instrucciones


una a una y analice el resultado.

PRCTICA 4.10b: 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)

SELECT
PATINDEX('%ensure%', DocumentSummary)
FROM Production.Document
WHERE DocumentID = 3;

SQL Server - Programacin

SELECT
PATINDEX('%en_ure%', DocumentSummary)
FROM Production.Document
WHERE DocumentID = 3;

USANDO TRANSACT-SQL

25

Prof. Marlon S. Ramrez M.

Otras funciones con texto - 1


PRCTICA 4.11a: Ejecute las instrucciones ejemplos y compruebe el resultado.
Funcin

Descripcin

Ejemplo

LEN(

Devuelve el nmero de caracteres de la


expresin de cadena especificada,
exceptuando espacios en blanco en los
extremos en Numero Caracteres.

SELECT LEN('FirstName')

Expresin)

LEFT(
expresin,
NumeroCaracteres)

RIGHT(
expresin,
NumeroCaracteres)

SUBSTRING(
expresin,
inicioParte,
NumeroCaracteres)
SQL Server - Programacin

Resultado=9

Devuelve la parte izquierda de una cadena de SELECT


LEFT('FirstName,5)
caracteres con el nmero de caracteres
especificado en Numero Caracteres.

Resultado=First

Devuelve la parte derecha de una cadena de


caracteres con el nmero de caracteres
especificado en Numero Caracteres.

SELECT
RIGHT('FirstName,4)
Resultado=Name

Devuelve una parte de una cadena de


caracteres a partir de inicioParte con el
nmero de caracteres especificado en
Numero Caracteres.

SELECT
SUBSTRING('FirstName,2
,4)

USANDO TRANSACT-SQL

Resultado=irst
26

13

25/03/2010

Prof. Marlon S. Ramrez M.

Otras funciones con texto - 2


PRCTICA 4.11b: Ejecute las instrucciones ejemplos y compruebe el resultado.
Funcin

Descripcin

Ejemplo

LTRIM(

Devuelve una expresin de caracteres


despus de que quita espacios a la
izquierda.

SELECT
LTRIM( FirstName )
Resultado=FirstName

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(

Devuelve una expresin de caracteres


tras convertir los datos de caracteres a
maysculas.

SELECT UPPER('FirstName')
Resultado=FIRSTNAME

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

expresin)

RTRIM(

expresin)

REPLACE(
expresin,
buscar, reemplazar)
SQL Server - Programacin

USANDO TRANSACT-SQL

27

Prof. Marlon S. Ramrez M.

Otras funciones con texto 3


PRCTICA 4.11c: Ejecute las instrucciones ejemplos y compruebe el resultado.
Funcin

Descripcin

Ejemplo

REPLICATE(

Repite un valor de cadena de un nmero


determinado de veces.

SELECT REPLICATE(0',4) +
F
Resultado=0000F

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(

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')

Devuelve una cadena Unicode con los


delimitadores aadidos para hacer la cadena de
entrada un Identificador vlido.

SELECT
QUOTENAME('FirstName')
Resultado=[FirstName]

expresin,
VecesaRepetir)

SPACE(

Expresin,
inicioParte,
NumeroCaracteres)

QUOTENAME()

SQL Server - Programacin

USANDO TRANSACT-SQL

Resultado=aijklmnef

28

14

25/03/2010

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 o


positivo.

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

15

25/03/2010

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)

c)

RAND
DECLARE @counter smallint;
SET @counter = 1;
WHILE @counter < 5
BEGIN
SELECT
RAND() Random_Number
SET @counter = @counter + 1
END;

FLOOR
SELECT
FLOOR($123.45),
FLOOR($-123.45),
FLOOR($0.0)

Resultado = 123.00 -124.00 0.00

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


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

SQL Server - Programacin

USANDO TRANSACT-SQL

32

16

25/03/2010

Prof. Marlon S. Ramrez M.

Funciones de Ranking
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
particin
ROW_NUMBER ( )

RANK()

OVER ( [ <partition_by_clause> ] <order_by_clause> )

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 ( )

DENSE_RANK()

OVER ( [ <partition_by_clause> ] <order_by_clause> )

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 ( )

NTILE(n)

OVER ( [ <partition_by_clause> ] <order_by_clause> )

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 )

SQL Server - Programacin

OVER ( [ <partition_by_clause> ] <order_by_clause> )


USANDO TRANSACT-SQL

33

Prof. Marlon S. Ramrez M.

PRCTICA 4.14a: Funciones de Ranking


1.

Ejecutar cada una de las instrucciones y analizar resultados


SELECT
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

3.

Aadir columna DENSE_RANK, ejecutar y comparar resultados

4.

Aadir columna NTILE, ejecutar y comparar resultados

,RANK() OVER ( ORDER BY i.LocationID DESC) AS 'RANK'


,DENSE_RANK() OVER ( ORDER BY i.LocationID DESC) AS 'DENSE_RANK'
,NTILE(3) OVER ( ORDER BY i.LocationID DESC) AS 'NTILE'

SQL Server - Programacin

USANDO TRANSACT-SQL

34

17

25/03/2010

Prof. Marlon S. Ramrez M.

PRCTICA 4.14b: Funciones de Ranking con


PARTITION
1.

Ejecutar cada una de las instrucciones y analizar resultados


SELECT
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

3.

Aadir columna DENSE_RANK, ejecutar y comparar resultados

,RANK() OVER (PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS 'RANK'

,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


ID

Name

LocID

Quantity

ROW_NUMBER

RANK

DENSE_RANK

NTILE

494
495
493
496
492
495
496
493
492
494

Paint - Silver
Paint - Blue
Paint - Red
Paint - Yellow
Paint - Black
Paint - Blue
Paint - Yellow
Paint - Red
Paint - Black
Paint - Silver

3
3
3
3
3
4
4
4
4
4

49
49
41
30
17
35
25
24
14
12

1
2
3
4
5
1
2
3
4
5

1
1
3
4
5
1
2
3
4
5

1
1
2
3
4
1
2
3
4
5

1
1
1
2
2
1
1
1
2
2

SQL Server - Programacin

USANDO TRANSACT-SQL

36

18

25/03/2010

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 ProductPrices
CREATE TABLE #ProductPrices (ProductName varchar(25), SuperSalePrice Money
NULL, SalePrice Money NULL, ListPrice Money NULL)

2. Ejecutar comandos para llenar la tabla


INSERT
INSERT
INSERT
INSERT
INSERT

INTO
INTO
INTO
INTO
INTO

#ProductPrices
#ProductPrices
#ProductPrices
#ProductPrices
#ProductPrices

VALUES(Standard Widget, NULL, NULL, 15.95)


VALUES(Economy Widget, NULL, 9.95, 12.95)
VALUES(Deluxe Widget, 19.95, 20.95, 22.95)
VALUES(Super Deluxe Widget, 29.45, 32.45, 38.95)
VALUES(Executive Widget, NULL, 45.95, 54.95)

3. Ejecutar el SELECT con COALESCE y revisar resultados


SELECT 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 resultados
SELECT 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 resultado
DECLARE @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

19

25/03/2010

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/3
Ejercicio 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

20

25/03/2010

Prof. Marlon S. Ramrez M.

Ejercicios 3/3
Ejercicio 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

21

Você também pode gostar