Top Banner
 25/03/2010 1 Prof. Marlon S. Ramírez M. USANDO TRANSACT-SQL 1. Consul tas de lo s d ato s 2. Funciones SQL (8 hr s) 3. Consul tas multi -tablas 4. Grupos y Agregación SQL Server - Programación USANDO TRANSACT-SQL 1 Prof. Marlon S. Ramírez M. Objetivos Ayudarles a aprender el mecanismo de utilizar funciones de todos los tipos. Introducirlos en las funciones más comunes de manipulación de valores y algunas no tan comunes para mostrar sus poderosas capacidades SQL Server - Programación USANDO TRANSACT-SQL 2
21

Curso SQL Server Prog U2-04

Nov 05, 2015

Download

Documents

Curso SQL Server Prog U2-04
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 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