SlideShare ist ein Scribd-Unternehmen logo
1 von 12
Funciones de SQL server

¿Qué es SQL? Funciones Básicas
SQL es un lenguaje universal dedicado a las bases de datos. Es un lenguaje de sintaxis simple y muy
potente. Mediante él se puede recorrer, modificar o borrar registros de las tablas de datos.

Propiedad SELECT: Hace la selección en una tabla de la BD.
SELECT * FROM datos
'Esta sentencia seleccionaría todos, absolutamente todos los registros dentro de la tabla datos.
SELECT * FROM datos WHERE usuario='Juan'
Seleccionaríamos todos los registros dentro de la tabla datos que tengan como usuario a "Juan".
Propiedad INSERT INTO: Agrega un nuevo registro a la tabla elegida
INSERT INTO datos (usuario) VALUES ('corsa') Insertamos en la tabla datos en la columna
usuario, un registro nuevo.
INSERT INTO datos (usuario, edad) VALUES ('corsa',20) Aquí insertamos 2 registros al
mismo tiempo.
Propiedad DELETE: Borra registros de nuestra tabla
DELETE FROM datos WHERE usuario = 'Pedrito'
'Borramos los registros donde el usuario sea "Pedrito".
DELETE FROM datos WHERE usuario = 'Mario' AND edad = 16 Borramos solo los usuario de
nombre Mario que tenían 16 años.
Propiedad UPDATE: Actualiza registros, modificando datos ya existentes.
UPDATE datos SET usuario = 'Pedrito' Esta modificación renombrará todos los usuarios a
"Pedrito".


Tipos de funciones
Funciones de conjuntos de filas: Devuelven un objeto que se puede usar como las referencias a tablas
en una instrucción SQL.
Funciones de agregado: Operan sobre una colección de valores y devuelven un solo valor de resumen.
Funciones de categoría: Devuelven un valor de categoría para cada fila de una partición.
Funciones escalares: Operan sobre un valor y después devuelven otro valor. Las funciones escalares se
pueden usar donde la expresión sea válida.


Funciones de cadena
Las funciones de cadena trabajan con campos char y varchar por lo que los literales que escribamos se
deben encerrar entre comillas simples. Estas funciones que vamos a explicar a continuación pueden
manipular cadenas de letras u otros caracteres por lo que las vamos a dividir en dos grupos:


Funciones que devuelven caracteres
Este tipo de funciones devuelven un carácter o varios caracteres.
Función          Propósito
CHR(n)           Nos devuelve el carácter cuyo valor en binario es n
CONCAT           Nos devuelve cad1 concatenada con cad2
UPPER            Convierte cad a mayúsculas
LOWER            Convierte cad a minúsculas
LPAD             Con esta función añadimos caracteres a cad1 por la izquierda hasta una longitud
                 máxima dada por n
INITCAP          Convierte la primera letra de cad a mayúscula
LTRIM            Elimina un conjunto de caracteres a la izquierda de cad, siendo set el conjunto de
caracteres a eliminar
RPAD               Con esta función añadimos caracteres de la misma forma que con la función LPAD
                   pero esta vez los añadimos a la derecha
RTRIM              Hace lo mismo que LTRIM pero por la derecha
REPLACE            Sustituye un conjunto de caracteres de 0 o más caracteres, devuelve cad con cada
                   ocurrencia de cadena_buscada sustituida por cadena_sustitucion
SUBSTR             Devuelve la subcadena de cad que abarca desde m hasta el numero de caracteres
                   dados por n.
TRANSLATE          Convierte caracteres de una cadena en caracteres diferentes. Devuelve cad1 con los
                   caracteres encontrados en cad2 y sustituidos por los caracteres de cad3


Ponemos algunos ejemplos de utilización de estas funciones:
Sentencia sql que nos devuelve las letras cuyo valor asccii es el 45 y el 23
select CHR(45), CHR(23) FROM TABLA;
Sentencia sql que obtiene el nombre de los alumnos sacando por pantalla la siguiente frase: el nombre
del alumno es (nombre que está almacenado en la tabla)
 select CONCAT ('el nombre de alumno es', nombre) from alumno;


Sentencia sql que me devuelve los nombres de los alumnos en mayúsculas
select UPPER(nombre) from alumno;
Sentencia sql que obtiene de un campo nombre, las 3 primeras letras
select SUBSTR(nombre,0,3) from alumno;
Y asi con el resto de funciones…


Funciones que devuelven valores numéricos
Estas funciones nos devuelven números a modo de información.


Función                              Propósito
ASCII(cad)                           Devuelve el valor ASCII de la primera letra de cad
INSTR(cad1, cad2[,comienzo[,m]])     Función que busca un conjunto de caracteres dentro de una
                                     cadena. Nos devuelve la posición de cad2 en cad1 empezando a
                                     buscar en comienzo
LENGTH(cad)                          Devuelve en número de caracteres de cad


Como con las funciones anteriores dejamos unos ejemplos para que veáis su funcionamiento.
Sentencia sql que nos devuelve el valor ASCII de la letra ('s')
select ASCII('s') from tabla;
Sentencia que nos devuelve la posición de la ocurrencia 'pe' dentro de la cadena 'Los perros están bien'
a partir de la posición 2
select INSTR('Los perros están bien','pe',2) from tabla;
Sentencia sql que nos devuelve el numero de caracteres de los nombres de los alumnos
select LENGTH(nombre) from alumnos;

Funciones en línea
   Las funciones en línea son las funciones que devuelven un conjunto de resultados correspondientes a
la ecuación de una sentencia SELECT.
El siguiente ejemplo muestra cómo crear una función en línea.
CREATE FUNCTION fn_MovimientosCuenta
      (
      @NumCuenta VARCHAR(20)
      )
      RETURNS TABLE
      AS
      RETURN
      (
      SELECT MOVIMIENTOS.*
      FROM MOVIMIENTOS
      INNER JOIN CUENTAS ON MOVIMIENTOS.IDCUENTA = CUENTAS.IDCUENTA
      WHERE CUENTAS.NUMCUENTA = @NumCuenta
      )


No podemos utilizar la clausula ORDER BY en la sentencia de una función el línea.
Las funciones en línea pueden utilizarse dentro de joins o querys como si fueran una tabla normal.
      SELECT * FROM fn_MovimientosCuenta('200700000001')
      SELECT *
      FROM CUENTAS
      INNER JOIN CUENTAS_CLIENTE
               ON CUENTAS_CLIENTE.IDCUENTA = CUENTAS.IDCUENTA
      INNER JOIN CLIENTES
               ON CLIENTES.id = CUENTAS_CLIENTE.IDCLIENTE
      INNER JOIN fn_MovimientosCuenta('200700000001') A
               ON A.IDCUENTA= CUENTAS.IDCUENTA


Tipos de datos de fecha y hora

En la tabla siguiente se enumeran los tipos de datos de fecha y hora de Transact-SQL.
                                                                                Tamaño de
                                                                                                        Despl
    Tipo de                                                                     almacenam
                 Formato                  Intervalo                Precisión                Precisión   azami
     datos                                                                         iento
                                                                                                         ento
                                                                                  (bytes)
time          hh:mm:ss[.nnnn   De 00:00:00.0000000 a              100           De 3 a 5       Sí        No
              nnn]             23:59:59.9999999                   nanosegundo

date          AAAA-MM-DD       De 0001-01-01 a 9999-12-31               1 día      3           No        No

smalldate     AAAA-MM-DD       De 1900-01-01 a 2079-06-06          1 minuto        4           No        No
time          hh:mm:ss

date time     AAAA-MM-DD       De 1753-01-01 a 9999-12-31          0,00333         8           No        No
              hh:mm:ss[.nnn]                                       segundos

datetime      AAAA-MM-DD       De 0001-01-01 00:00:00.0000000 a   100           De 6 a 8       Sí        No
2             hh:mm:ss         9999-12-31 23:59:59.9999999        nanosegundo

datetimeo     AAAA-MM-DD       De 0001-01-01                            100     De 8 a 10      Sí        Sí
ffset         hh:mm:ss[.nnnn   00:00:00.0000000 a 9999-12-        nanosegundo
              nnn] [+|]hh:mm   31 23:59:59.9999999 (en UTC)



NOTA
El tipo de datos rowversion de Transact-SQL no es un tipo de datos de fecha y hora. timestamp es un sinónimo
obsoleto de rowversión.
Funciones de fecha y hora
En las tablas siguientes se enumeran las funciones de fecha y hora de Transact-SQL. Para obtener más
información acerca del determinismo, vea Funciones deterministas y no deterministas.

Funciones que obtienen valores de fecha y hora del sistema
Todos los valores de fecha y hora del sistema se derivan del sistema operativo del equipo en el que se
ejecuta la instancia de SQL Server.


Funciones de fecha y hora del sistema de precisión elevada

SQL Server 2008 R2 obtiene los valores de fecha y hora utilizando la API                                            de Windows
GetSystemTimeAsFileTime(). La exactitud depende del hardware del equipo y de                                       la versión de
Windows en las que la instancia de SQL Server se esté ejecutando. La precisión de esta                             API se fija en
100 nanosegundos. La precisión se puede determinar mediante la API                                                 de Windows
GetSystemTimeAdjustment().


Función        Sintaxis                  Valor devuelto                                              Tipo de           Determinis
                                                                                                     datos             mo
SYSDATETIME    SYSDATETIME ()            Devuelve un valor datetime2(7) que contiene la fecha y      datetime2         No
                                         hora del equipo en el que la instancia de SQL Server se                       determinista
                                         está ejecutando. El ajuste de zona horaria no está
                                         incluido.


SYSDATETIMEO   SYSDATETIMEOFFSET         Devuelve un valor datetimeoffset(7) que contiene la         datetimeoffset    No
FFSET          ( )                       fecha y hora del equipo en el que la instancia de SQL                         determinista
                                         Server se está ejecutando. El ajuste de zona horaria
                                         está incluido.

               SYSUTCDATETIME ( )        Devuelve un valor datetime2(7) que contiene la fecha y       datetime2        No
SYSUTCDATETI                             hora del equipo en el que la instancia de SQL Server se                       determinista
ME                                       está ejecutando. La fecha y hora se devuelven como
                                         hora universal coordinada (UTC).




Funciones de fecha y hora del sistema de precisión baja
Función              Sintaxis             Valor devuelto                                         Tipo     de Determinismo
                                                                                                 datos
                                                                                                 devuelto

CURRENT_TIMESTAMP    CURRENT_TIMESTAMP    Devuelve un valor que contiene la fecha y hora del      datetime       No determinista
                                          equipo en el que la instancia de SQL Server se
                                          está ejecutando.


GETDATE              GETDATE ( )          Devuelve un valor que contiene la fecha y hora del      datetime       No determinista
                                          equipo. El ajuste de zona horaria no está incluido.


GETUTCDATE           GETUTCDATE ( )       Devuelve un valor que contiene la fecha y hora del      datetime       No determinista
                                          equipo. La fecha y hora se devuelven como una
                                          hora universal coordinada (UTC).
Funciones que obtienen partes de la fecha y hora
 Función      Sintaxis                               Valor devuelto                             Tipo      Determinismo

DATENAME     DATENAME         Devuelve una cadena de caracteres que representa el datepart    nvarchar   No determinista
            (datepart date)               especificado de la fecha especificada.


 DATEPART     DATEPART        Devuelve un entero que representa el datepart especificado        int      No determinista


   DAY       DAY ( date )     Devuelve un entero que representa la parte del día de date        int       Determinista
                              especificado.


  MONTH     MONTH ( date )    Devuelve un entero que representa la parte del mes de un date     int       Determinista
                              especificado.


   YEAR      YEAR ( date )    Devuelve un entero que representa la parte del año de un date     int       Determinista
                              especificado.




Funciones escalares

Categoría de la función
Funciones de configuración: Devuelven información acerca de la configuración actual.
Funciones criptográficas: Admiten cifrado, descifrado, firma digital y la validación de firmas digitales.
Funciones del cursor: Devuelven información acerca de los cursores.
Funciones de tipo de datos : Devuelven información sobre los valores de identidad y los valores de otros
tipos de datos.
Tipos de datos y funciones de fecha y hora: Llevan a cabo operaciones sobre un valor de entrada de fecha
y hora, y devuelven un valor numérico, de cadena o de fecha y hora.
Funciones matemáticas: Realizan cálculos basados en valores de entrada proporcionados como parámetros a
las funciones y devuelven valores numéricos.
 Funciones de metadatos: Devuelven información acerca de la base de datos y los objetos de la base de
datos.
Funciones escalares ODBC: Devuelven información sobre funciones ODBC escalares en una instrucción
Transact-SQL.
Funciones de replicación: Devuelven información que se usa para administrar, supervisar y mantener la
topología de replicación
Funciones de seguridad: Devuelven información acerca de usuarios y roles.
Funciones de cadena: Realizan operaciones en el valor de entrada de una cadena (char o varchar) y devuelven
una cadena o un valor numérico.
Funciones del sistema: Realizan operaciones y devuelven información acerca de valores, objetos y
configuraciones de una instancia de SQL Server.
Funciones estadísticas del sistema: Devuelven información estadística acerca del sistema.
Funciones de texto e imagen: Realizan operaciones sobre los valores de entrada o columnas de texto o
imagen, y devuelven información acerca del valor.

Funciones de desencadenador: Devuelven información acerca de los desencadenadores.
Determinismo de función
Las funciones integradas de SQL Server son deterministas o no deterministas. Las funciones son
deterministas cuando devuelven siempre el mismo resultado cada vez que se llaman con un conjunto
específico de valores de entrada. Las funciones son no deterministas cuando es posible que devuelvan
distintos resultados cada vez que se llaman con un mismo conjunto específico de valores de entrada.
Para obtener más información, vea Funciones deterministas y no deterministas


Intercalación de funciones
Las funciones que toman una entrada de cadena de caracteres y devuelven una salida de cadena de
caracteres utilizan la intercalación de la cadena de entrada para la salida.
Las funciones que toman entradas que no son de caracteres y devuelven una cadena de caracteres
utilizan la intercalación predeterminada de la base de datos actual para la salida.
Las funciones que toman varias entradas de cadena de caracteres y devuelven una cadena de
caracteres utilizan las reglas de prioridad de intercalación para establecer la intercalación de la cadena
de salida. Para obtener más información, vea Prioridad de intercalación (Transact-SQL).


Funciones escalares
Las funciones escalares definidas por el usuario devuelven un único valor de datos del tipo definido en
la cláusula RETURNS. Las funciones escalares en línea no tienen cuerpo; el valor escalar es el resultado
de una sola instrucción. Para una función escalar de múltiples instrucciones, el cuerpo de la función,
definido en un bloque BEGIN...END, contiene una serie de instrucciones Transact-SQL que devuelven el
valor único. El tipo devuelto puede ser de cualquier tipo de datos excepto text, ntext, image, cursor y
timestamp.
En el ejemplo siguiente se crea una función escalar con múltiples instrucciones. La función toma un valor
de entrada, ProductID, y devuelve un solo valor de datos, la cantidad agregada del producto
especificado en el inventario.
other
Copiar
USE AdventureWorks;
GO
IF OBJECT_ID (N'dbo.ufnGetInventoryStock', N'FN') IS NOT NULL
   DROP FUNCTION ufnGetInventoryStock;
GO
CREATE FUNCTION dbo.ufnGetInventoryStock(@ProductID int)
RETURNS int
AS
-- Returns the stock level for the product.
BEGIN
   DECLARE @ret int;
   SELECT @ret = SUM(p.Quantity)
   FROM Production.ProductInventory p
   WHERE p.ProductID = @ProductID
      AND p.LocationID = '6';
    IF (@ret IS NULL)
      SET @ret = 0;
   RETURN @ret;
END;
GO


Funciones integradas
SQL Server proporciona las funciones integradas para ayudarle a realizar diversas operaciones. No se
pueden modificar. Puede utilizar funciones integradas en instrucciones Transact-SQL para:
Tener acceso a información de las tablas del sistema de SQL Server sin tener acceso a las
      tablas del sistema directamente. Para obtener más información, vea Usar las funciones del
      sistema.
      Realizar tareas habituales como SUM, GETDATE o IDENTITY. Para obtener más información,
      vea Funciones (Transact-SQL).

Las funciones integradas devuelven tipos de datos escalares o table. Por ejemplo, @@ERROR devuelve
0 si la última instrucción Transact-SQL se ejecutó correctamente. Si la instrucción generó un error,
@@ERROR devuelve el número de error. Y la función SUM( parameter) devuelve la suma de todos los
valores del parámetro.


Consultas agregadas
La clausula GROUP BY combina los registros con valores idénticos en un único registro. Para cada
registro se puede crear un valor agregado si se incluye una función SQL agregada, como por ejemplo
Sum o Count, en la instrucción SELECT. Su sintaxis es:

            SELECT [ALL | DISTINCT ]
                    <nombre_campo> [{,<nombre_campo>}]
                    [{,<funcion_agregado>}]
            FROM <nombre_tabla>|<nombre_vista>
                [{,<nombre_tabla>|<nombre_vista>}]
            [WHERE <condicion> [{ AND|OR <condicion>}]]
            [GROUP BY <nombre_campo> [{,<nombre_campo >}]]
            [HAVING <condicion>[{ AND|OR <condicion>}]]
            [ORDER BY <nombre_campo>|<indice_campo> [ASC | DESC]
               [{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]



   GROUP BY es opcional. Si se utiliza GROUP BY pero no existe una función SQL agregada en la
instrucción SELECT se obtiene el mismo resultado que con una consulta SELECT DISTINCT. Los
valores Null en los campos GROUP BY se agrupan y no se omiten. No obstante, los valores Null no se
evalúan en ninguna de las funciones SQL agregadas.

   Todos los campos de la lista de campos de SELECT deben incluirse en la cláusula GROUP BY o como
argumentos de una función SQL agregada.

            SELECT marca, modelo, SUM(numero_kilometros)
            FROM tCoches
            GROUP BY marca, modelo



La cláusula HAVING Una vez que GROUP BY ha combinado los registros, HAVING muestra cualquier
registro agrupado por la cláusula GROUP BY que satisfaga las condiciones de la cláusula HAVING. Se
utiliza la cláusula WHERE para excluir aquellas filas que no desea agrupar, y la cláusula HAVING para
filtrar los registros una vez agrupados.
HAVING es similar a WHERE, determina qué registros se seleccionan. Una vez que los registros se han
agrupado utilizando GROUP BY, HAVING determina cuáles de ellos se van a mostrar. HAVING permite
el uso de funciones agregadas.

            SELECT marca, modelo, SUM(numero_kilometros)
            FROM tCoches
            WHERE marca <> 'BMW'
            GROUP BY marca, modelo
            HAVING SUM(numero_kilometros)>100000
En el ejemplo anterior, no se cuentan los datos para todas las marcas menos "BMW", una vez que se han
contado, se evalua HAVING, y el conjunto de resultados devuelve solo aquellos modelos con más de
100.000 km.
AVG.- Calcula la media aritmética de un conjunto de valores contenidos en un campo especificado de
una consulta. Su sintaxis es la siguiente
     En donde expr representa el campo que contiene los datos numéricos para los que se desea calcular
la media o una expresión que realiza un cálculo utilizando los datos de dicho campo. La media calculada
por Avg es la media aritmética (la suma de los valores dividido por el número de valores). La función Avg
no incluye ningún campo Null en el cálculo.

             SELECT marca, modelo, AVG(numero_kilometros)
             FROM tCoches
             GROUP BY marca, modelo

Count.- Calcula el número de registros devueltos por una consulta. Su sintaxis es la siguiente: En
donde expr contiene el nombre del campo que desea contar. La función Count no cuenta los registros
que tienen campos null a menos que expr sea el carácter comodín asterisco (*). Si utiliza un asterisco,
Count calcula el número total de registros, incluyendo aquellos que contienen campos null. Count(*) es
considerablemente más rápida que Count(Campo).


     SELECT COUNT(*) FROM tCoches;
     SELECT marca, COUNT(modelo)
     FROM tCoches
     GROUP BY marca;
     SELECT marca, COUNT(DISTINCT modelo)
     FROM tCoches
     GROUP BY marca;

  Max, Min Devuelven el mínimo o el máximo de un conjunto de valores contenidos en un campo
especifico de una consulta. Su sintaxis es:
En donde expr es el campo sobre el que se desea realizar el cálculo. Expr pueden incluir el nombre de un
campo de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario
pero no otras de las funciones agregadas de SQL).

            SELECT marca, modelo, MIN(numero_kilometros)
                      , MAX(numero_kilometros)
            FROM tCoches
            GROUP BY marca, modelo

Sum.- Devuelve la suma del conjunto de valores contenido en un campo especifico de una consulta. Su
sintaxis es:
En donde expr respresenta el nombre del campo que contiene los datos que desean sumarse o una
expresión que realiza un cálculo utilizando los datos de dichos campos. Los operandos de expr pueden
incluir el nombre de un campo de una tabla, una constante o una función (la cual puede ser intrínseca o
definida por el usuario pero no otras de las funciones agregadas de SQL).

            SELECT marca, modelo, SUM(numero_kilometros)
            FROM tCoches
            GROUP BY marca, modelo

Funciones de valores simples:
ABS(n)= Devuelve el valor absoluto de (n).
CEIL(n)=Obtiene el valor entero inmediatamente superior o igual a "n".
FLOOT(n) = Devuelve el valor entero inmediatamente inferior o igual a "n".
MOD (m, n)= Devuelve el resto resultante de dividir "m" entre "n".
NVL (valor, expresión)= Sustituye un valor nulo por otro valor.
POWER (m, exponente)= Calcula la potencia de un numero.
ROUND (numero [, m])= Redondea números con el numero de dígitos de precisión indicados.
SIGN (valor)= Indica el signo del "valor".
SQRT(n)= Devuelve la raíz cuadrada de "n".
TRUNC (numero, [m])= Trunca números para que tengan una cierta cantidad de dígitos de precisión.
VAIRANCE (valor)= Devuelve la varianza de un conjunto de valores.


Funciones de grupos de valores:
AVG(n)= Calcula el valor medio de "n" ignorando los valores nulos.
COUNT (* | Expresión)= Cuenta el numero de veces que la expresión evalúa algún dato con valor no nulo.
La opción "*" cuenta todas las filas seleccionadas.
MAX (expresión)= Calcula el máximo.
MIN (expresión)= Calcula el mínimo.
SUM (expresión)= Obtiene la suma de los valores de la expresión.
GREATEST (valor1, valor2…)= Obtiene el mayor valor de la lista.
LEAST (valor1, valor2…)= Obtiene el menor valor de la lista.
Funciones que devuelven valores de caracteres:
CHR(n) = Devuelve el carácter cuyo valor en binario es equivalente a "n".
CONCAT (cad1, cad2)= Devuelve "cad1" concatenada con "cad2".
LOWER (cad)= Devuelve la cadena "cad" en minúsculas.
UPPER (cad)= Devuelve la cadena "cad" en mayúsculas.
INITCAP (cad)= Convierte la cadena "cad" a tipo titulo.
LPAD (cad1, n[,cad2])= Añade caracteres a la izquierda de la cadena hasta que tiene una cierta longitud.
RPAD (cad1, n[,cad2])= Añade caracteres a la derecha de la cadena hasta que tiene una cierta longitud.
LTRIM (cad [,set])= Suprime un conjunto de caracteres a la izquierda de la cadena.
RTRIM (cad [,set])= Suprime un conjunto de caracteres a la derecha de la cadena.
REPLACE (cad, cadena_busqueda [, cadena_sustitucion])= Sustituye un carácter o caracteres de una
cadena con 0 o mas caracteres.
SUBSTR (cad, m [,n])= Obtiene parte de una cadena.
TRANSLATE (cad1, cad2, cad3)= Convierte caracteres de una cadena en caracteres diferentes, según
un plan de sustitución marcado por el usuario.


Funciones que devuelven valores numéricos:
ASCII(cad)= Devuelve el valor ASCII de la primera letra de la cadena "cad".
INSTR (cad1, cad2 [, comienzo [,m]])= Permite una búsqueda de un conjunto de caracteres en una
cadena pero no suprime ningún carácter después.
LENGTH (cad)= Devuelve el numero de caracteres de cad.


Funciones de conversión:
TO_CHAR= Transforma un tipo DATE ó NUMBER en una cadena de caracteres.
TO_DATE= Transforma un tipo NUMBER ó CHAR en DATE.
TO_NUMBER= Transforma una cadena de caracteres en NUMBER.
Funciones en línea de múltiples sentencias
Las funciones en línea de múltiples sentencias son similares a las funciones en línea excepto que el
conjunto de resultados que devuelven puede estar compuesto por la ejecución de varios consultas
SELECT.
El siguiente ejemplo muestra el uso de una función de tabla de multi sentencias.
   /* Esta función busca la tres cuentas con mayor saldo
    * y obtiene los tres últimos movimientos de cada una
    * de estas cuentas
    */

    CREATE FUNCTION fn_CuentaMovimietos()
    RETURNS @datos TABLE
    ( -- Estructura de la tabla que devuelve la funcion.
   NumCuenta varchar(20),
   Saldo decimal(10,2),
   Saldo_anterior decimal(10,2),
   Saldo_posterior decimal(10,2),
   Importe_Movimiento decimal(10,2),
   FxMovimiento datetime
    )
    AS
    BEGIN
   -- Variables necesarias para la lógica de la funcion.
   DECLARE @idcuenta int,
               @numcuenta varchar(20),
               @saldo decimal(10,2)

   -- Cursor con las 3 cuentas de mayor saldo
   DECLARE CDATOS CURSOR FOR
   SELECT TOP 3 IDCUENTA, NUMCUENTA, SALDO
   FROM CUENTAS
   ORDER BY SALDO DESC

   OPEN CDATOS
   FETCH CDATOS INTO @idcuenta, @numcuenta, @saldo
   -- Recorremos el cursor
   WHILE (@@FETCH_STATUS = 0)
   BEGIN
   -- Insertamos la cuenta en la variable de salida
   INSERT INTO @datos
   (NumCuenta, Saldo)
   VALUES
   (@numcuenta, @saldo)
   -- Insertamos los tres últimos movimientos de la cuenta
   INSERT INTO @datos
   (Saldo_anterior, Saldo_posterior,
    Importe_Movimiento, FxMovimiento )
   SELECT TOP 3
    SALDO_ANTERIOR, SALDO_POSTERIOR,
    IMPORTE, FXMOVIMIENTO
   FROM MOVIMIENTOS
   WHERE IDCUENTA = @idcuenta
   ORDER BY FXMOVIMIENTO DESC
   -- Vamos a la siguiente cuenta
   FETCH CDATOS INTO @idcuenta, @numcuenta, @saldo
END
    CLOSE CDATOS;
   DEALLOCATE CDATOS;
   RETURN
    END


Para ejecutar la función:
           select * from fn_CuentaMovimietos()


Funciones de conversión caracteres
       LOWER: Convierte a minúsculas.
       UPPER: Convierte a mayúsculas.
       INITCAP: Convierte la primera letra de cada palabra en mayúsculas, y el resto en minúscula.
       Atención: Usar una función de conversión dentro de la cláusula WHERE puede ser altamente
       ineficiente porque si la columna afectada forma parte de un índice éste lo desactiva,
       provocando un bajo rendimiento.


Funciones manipulación caracteres
       CONCAT: Concatena dos valores.
       SUBSTR: Extrae una subcadena.
       LENGTH: Devuelve la longitud de la cadena.
       INSTR: Devuelve la posición de un carácter o subcadena.
       LPAD: Justifica a la derecha la cadena.
       RPAD: Justifica a la izquierda la cadena.


Funciones Numéricas
       ROUND (columna | expresión, n)
Redondea a n posiciones decimales. Si se omite n, no se redondea con decimales. Si n es negativo, los
números a la izquierda del punto decimal se redondean a decenas, centenas, ...
       TRUNC (columna | expresión, n)
                Trunca en la enésima posición decimal. Si se omite n, sin lugares decimales. Si n es
                negativa, los números a la izquierda del punto decimal se truncan a cero.
       MOD (m, n)
                Devuelve el resto de la división de m por n.
Ejemplos de funciones numéricas
       SQL> SELECT ROUND (45.923, 2), ROUND (45.923, 0), ROUND (45.923, -1)
       FROM SYS.DUAL;
       Resultado: 45.92 46 50
       SQL> SELECT TRUNC (45.923, 2), TRUNC (45,923), TRUNC (45.923, -1)
       FROM SYS.DUAL;
       Resultado: 45.92 45 40


Funciones de conversión
       Conversión Implícita de datos
                   De VARCHAR2 o CHAR          a NUMBER
                   De VARCHAR2 o CHAR          a DATE
                   De NUMBER           a VARCHAR2
                   De DATE          a VARCHAR2
Funciones de conversión
      TO_CHAR (número | fecha [,’fmt’])
           Convierte un número o fecha en una cadena de caracteres VARCHAR2 con el modelo de
           formato fmt.
                9: Representa un número
                0: Fuerza a que se muestra el cero
                $: Signo de dólar
                L: Usa el signo de moneda local
                .: Imprime el punto decimal
                ;: Imprime el indicador de millar
                Para fechas, los fmt anteriores.


Funciones de conversión
      TO_NUMBER (char)
             Convierte una cadena de caracteres con dígitos en un número.
      TO_DATE (char [,’fmt’])
             Convierte una cadena de caracteres representando una fecha en un valor de fecha
             según el fmt especificado. Si se omite el fmt, el formato es DD-MON-YY.
      NVL (expr1, expr2)
             Convierte un nulo (expr1) a un valor de tipo fecha, cadena o número (expr2).



La Función DECODE




     Hace las veces de sentencia CASE o IF-THEN-ELSE, para facilitar consultas condicionales.
     Descifra una expresión después de compararla con cada valor de búsqueda. Si la expresión es la
     misma que la búsqueda, se devuelve el resultado. Si se omite el valor por defecto, se devolverá
     un valor nulo donde una búsqueda no coincida con ninguno de los valores resultantes.

Weitere ähnliche Inhalte

Was ist angesagt?

MAPA MENTAL INGENIERÍA DE REQUISITOS E INGENIERÍA DE REQUERIMIENTOS
MAPA MENTAL INGENIERÍA DE REQUISITOS E INGENIERÍA DE REQUERIMIENTOSMAPA MENTAL INGENIERÍA DE REQUISITOS E INGENIERÍA DE REQUERIMIENTOS
MAPA MENTAL INGENIERÍA DE REQUISITOS E INGENIERÍA DE REQUERIMIENTOSJesus F Rosas
 
Ingenieria de software modelado de la logica de procesos
Ingenieria de software modelado de la logica de procesosIngenieria de software modelado de la logica de procesos
Ingenieria de software modelado de la logica de procesosDavid Amaya
 
Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos josecuartas
 
Organigrama de informatica
Organigrama de informaticaOrganigrama de informatica
Organigrama de informaticaYare LoZada
 
Funciones y Componente de un Sistema de Gestión de Base de Datos
Funciones y Componente de un Sistema de Gestión de Base de DatosFunciones y Componente de un Sistema de Gestión de Base de Datos
Funciones y Componente de un Sistema de Gestión de Base de DatosJesus Parra
 
Tecnicas y herramientas de desarrollo de software(1)
Tecnicas y herramientas de desarrollo de software(1)Tecnicas y herramientas de desarrollo de software(1)
Tecnicas y herramientas de desarrollo de software(1)Gustavo Gualsema
 
CronogramanEtapanLectivanGeneralnVF___7162031f9f48b21___.pdf
CronogramanEtapanLectivanGeneralnVF___7162031f9f48b21___.pdfCronogramanEtapanLectivanGeneralnVF___7162031f9f48b21___.pdf
CronogramanEtapanLectivanGeneralnVF___7162031f9f48b21___.pdfEduarHurtado1
 
14 Clase Flujo De AnáLisis Ii
14 Clase Flujo De AnáLisis Ii14 Clase Flujo De AnáLisis Ii
14 Clase Flujo De AnáLisis IiJulio Pari
 
Control timer
Control timerControl timer
Control timerCynthiaGU
 

Was ist angesagt? (20)

Zachman framework
Zachman frameworkZachman framework
Zachman framework
 
ERS
ERSERS
ERS
 
Del Modelo Entidad-Relación al Modelo relacional
Del Modelo Entidad-Relación al Modelo relacionalDel Modelo Entidad-Relación al Modelo relacional
Del Modelo Entidad-Relación al Modelo relacional
 
MAPA MENTAL INGENIERÍA DE REQUISITOS E INGENIERÍA DE REQUERIMIENTOS
MAPA MENTAL INGENIERÍA DE REQUISITOS E INGENIERÍA DE REQUERIMIENTOSMAPA MENTAL INGENIERÍA DE REQUISITOS E INGENIERÍA DE REQUERIMIENTOS
MAPA MENTAL INGENIERÍA DE REQUISITOS E INGENIERÍA DE REQUERIMIENTOS
 
Ingenieria de software modelado de la logica de procesos
Ingenieria de software modelado de la logica de procesosIngenieria de software modelado de la logica de procesos
Ingenieria de software modelado de la logica de procesos
 
Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos
 
Organigrama de informatica
Organigrama de informaticaOrganigrama de informatica
Organigrama de informatica
 
Tabla de símbolos
Tabla de símbolosTabla de símbolos
Tabla de símbolos
 
Reglas de Oro
Reglas de OroReglas de Oro
Reglas de Oro
 
1.6 Activos Informáticos
1.6 Activos Informáticos1.6 Activos Informáticos
1.6 Activos Informáticos
 
Casos De Uso
Casos De UsoCasos De Uso
Casos De Uso
 
Funciones y Componente de un Sistema de Gestión de Base de Datos
Funciones y Componente de un Sistema de Gestión de Base de DatosFunciones y Componente de un Sistema de Gestión de Base de Datos
Funciones y Componente de un Sistema de Gestión de Base de Datos
 
Tecnicas y herramientas de desarrollo de software(1)
Tecnicas y herramientas de desarrollo de software(1)Tecnicas y herramientas de desarrollo de software(1)
Tecnicas y herramientas de desarrollo de software(1)
 
Funciones del DBA, SA Y DA
Funciones del DBA, SA Y DAFunciones del DBA, SA Y DA
Funciones del DBA, SA Y DA
 
Modelo de requerimientos
Modelo de requerimientosModelo de requerimientos
Modelo de requerimientos
 
Tecnologia ASP.net
Tecnologia ASP.netTecnologia ASP.net
Tecnologia ASP.net
 
Group by, having, order by, SQL
Group by, having, order by, SQLGroup by, having, order by, SQL
Group by, having, order by, SQL
 
CronogramanEtapanLectivanGeneralnVF___7162031f9f48b21___.pdf
CronogramanEtapanLectivanGeneralnVF___7162031f9f48b21___.pdfCronogramanEtapanLectivanGeneralnVF___7162031f9f48b21___.pdf
CronogramanEtapanLectivanGeneralnVF___7162031f9f48b21___.pdf
 
14 Clase Flujo De AnáLisis Ii
14 Clase Flujo De AnáLisis Ii14 Clase Flujo De AnáLisis Ii
14 Clase Flujo De AnáLisis Ii
 
Control timer
Control timerControl timer
Control timer
 

Andere mochten auch

10 sistemas gestores de base de datos
10 sistemas gestores de base de datos10 sistemas gestores de base de datos
10 sistemas gestores de base de datosGusttavo Nipas
 
Sistema gestor de base de datos para moviles
Sistema gestor de base de datos para movilesSistema gestor de base de datos para moviles
Sistema gestor de base de datos para movilesajhr1995
 
DDL - Lenguaje de definición de datos
DDL - Lenguaje de definición de datosDDL - Lenguaje de definición de datos
DDL - Lenguaje de definición de datosvargasaldanajohanna
 
Comandos ddl y dml
Comandos ddl y dmlComandos ddl y dml
Comandos ddl y dmlGerardo
 
Funciones de sql
Funciones de sqlFunciones de sql
Funciones de sqlAngel Reyes
 
SQL Server 2014 y La Plataforma de Datos
SQL Server 2014 y La Plataforma de DatosSQL Server 2014 y La Plataforma de Datos
SQL Server 2014 y La Plataforma de DatosJoseph Lopez
 
Base De Datos Moviles
Base De Datos MovilesBase De Datos Moviles
Base De Datos Movilesguest8d7627
 
Sql DDL Lenguaje de definición de datos
Sql DDL Lenguaje de definición de datosSql DDL Lenguaje de definición de datos
Sql DDL Lenguaje de definición de datosjosecuartas
 
Vistas en bases de datos
Vistas en bases de datosVistas en bases de datos
Vistas en bases de datosDenisse C
 
Sistemas gestores de base de datos (sgbd)
Sistemas gestores de base de datos (sgbd)Sistemas gestores de base de datos (sgbd)
Sistemas gestores de base de datos (sgbd)Henry Cumbicus Rivera
 
Requerimientos de instalacion de SQL
Requerimientos de instalacion de SQL Requerimientos de instalacion de SQL
Requerimientos de instalacion de SQL rumus1000
 
Tipos de datos en sql server
Tipos de datos en sql serverTipos de datos en sql server
Tipos de datos en sql serverEmanuel MCastillo
 
Tipos de base de datos de sql server 2008
Tipos de base de datos de sql server 2008Tipos de base de datos de sql server 2008
Tipos de base de datos de sql server 2008Elizabeth Huaraya Apaza
 
base de datos para dispositivos móviles
base de datos para dispositivos móvilesbase de datos para dispositivos móviles
base de datos para dispositivos móvilesyavidamian
 
Los tipos de datos de sql server
Los tipos de datos de sql serverLos tipos de datos de sql server
Los tipos de datos de sql serverCEUNISAL
 

Andere mochten auch (20)

10 sistemas gestores de base de datos
10 sistemas gestores de base de datos10 sistemas gestores de base de datos
10 sistemas gestores de base de datos
 
Sistema gestor de base de datos para moviles
Sistema gestor de base de datos para movilesSistema gestor de base de datos para moviles
Sistema gestor de base de datos para moviles
 
DDL - Lenguaje de definición de datos
DDL - Lenguaje de definición de datosDDL - Lenguaje de definición de datos
DDL - Lenguaje de definición de datos
 
Comandos ddl y dml
Comandos ddl y dmlComandos ddl y dml
Comandos ddl y dml
 
Caracteristicas Microsoft SQL Server
Caracteristicas Microsoft SQL ServerCaracteristicas Microsoft SQL Server
Caracteristicas Microsoft SQL Server
 
Funciones de sql
Funciones de sqlFunciones de sql
Funciones de sql
 
Funciones sql
Funciones sqlFunciones sql
Funciones sql
 
SQL Server 2014 y La Plataforma de Datos
SQL Server 2014 y La Plataforma de DatosSQL Server 2014 y La Plataforma de Datos
SQL Server 2014 y La Plataforma de Datos
 
Base De Datos Moviles
Base De Datos MovilesBase De Datos Moviles
Base De Datos Moviles
 
Tipos de datos sql server
Tipos de datos sql serverTipos de datos sql server
Tipos de datos sql server
 
Sql DDL Lenguaje de definición de datos
Sql DDL Lenguaje de definición de datosSql DDL Lenguaje de definición de datos
Sql DDL Lenguaje de definición de datos
 
Vistas en bases de datos
Vistas en bases de datosVistas en bases de datos
Vistas en bases de datos
 
Taller Básico Sentencias SQL
Taller Básico Sentencias SQL Taller Básico Sentencias SQL
Taller Básico Sentencias SQL
 
Sistemas gestores de base de datos (sgbd)
Sistemas gestores de base de datos (sgbd)Sistemas gestores de base de datos (sgbd)
Sistemas gestores de base de datos (sgbd)
 
Exchange server
Exchange serverExchange server
Exchange server
 
Requerimientos de instalacion de SQL
Requerimientos de instalacion de SQL Requerimientos de instalacion de SQL
Requerimientos de instalacion de SQL
 
Tipos de datos en sql server
Tipos de datos en sql serverTipos de datos en sql server
Tipos de datos en sql server
 
Tipos de base de datos de sql server 2008
Tipos de base de datos de sql server 2008Tipos de base de datos de sql server 2008
Tipos de base de datos de sql server 2008
 
base de datos para dispositivos móviles
base de datos para dispositivos móvilesbase de datos para dispositivos móviles
base de datos para dispositivos móviles
 
Los tipos de datos de sql server
Los tipos de datos de sql serverLos tipos de datos de sql server
Los tipos de datos de sql server
 

Ähnlich wie Funciones de sql server

Ähnlich wie Funciones de sql server (20)

Sql basico parte_ii_
Sql basico parte_ii_Sql basico parte_ii_
Sql basico parte_ii_
 
Sql basico parte_ii_
Sql basico parte_ii_Sql basico parte_ii_
Sql basico parte_ii_
 
Sql ddl
Sql ddlSql ddl
Sql ddl
 
Mysql
MysqlMysql
Mysql
 
Guia sql funciones
Guia sql funcionesGuia sql funciones
Guia sql funciones
 
Precentacion de sql visual
Precentacion de sql visualPrecentacion de sql visual
Precentacion de sql visual
 
Taller sql sesion_03_a
Taller sql sesion_03_aTaller sql sesion_03_a
Taller sql sesion_03_a
 
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
PostgreSQL - Lección 3 - Usando funciones simples para manipular la salida de...
 
Amnel
AmnelAmnel
Amnel
 
Practica sql i,ii
Practica sql i,iiPractica sql i,ii
Practica sql i,ii
 
Práctica+..
Práctica+..Práctica+..
Práctica+..
 
Bdii 04 sql
Bdii 04 sqlBdii 04 sql
Bdii 04 sql
 
Profe pitta
Profe pittaProfe pitta
Profe pitta
 
Transact+Sql+2005
Transact+Sql+2005Transact+Sql+2005
Transact+Sql+2005
 
Consultas de resumen
Consultas de resumenConsultas de resumen
Consultas de resumen
 
Modo de procedimiento postgres
Modo de procedimiento postgresModo de procedimiento postgres
Modo de procedimiento postgres
 
Servomotores - Funciones con Arduino
Servomotores - Funciones con ArduinoServomotores - Funciones con Arduino
Servomotores - Funciones con Arduino
 
Manual de Usuario - Lenguaje SQL - Clase 7.docx
Manual de Usuario - Lenguaje SQL - Clase 7.docxManual de Usuario - Lenguaje SQL - Clase 7.docx
Manual de Usuario - Lenguaje SQL - Clase 7.docx
 
Manual postgre sql
Manual postgre sqlManual postgre sql
Manual postgre sql
 
Sql td a
Sql   td aSql   td a
Sql td a
 

Mehr von Emily_Fdez

Panel de control
Panel de controlPanel de control
Panel de controlEmily_Fdez
 
Panel de control
Panel de controlPanel de control
Panel de controlEmily_Fdez
 
Nucleo del sistema operativo
Nucleo del sistema operativoNucleo del sistema operativo
Nucleo del sistema operativoEmily_Fdez
 
Sistemas operativos por servicio
Sistemas operativos por servicioSistemas operativos por servicio
Sistemas operativos por servicioEmily_Fdez
 
Unidad de control
Unidad de controlUnidad de control
Unidad de controlEmily_Fdez
 
Estructura del sistema operativo
Estructura del sistema operativoEstructura del sistema operativo
Estructura del sistema operativoEmily_Fdez
 
Funciones de grupo
Funciones de grupoFunciones de grupo
Funciones de grupoEmily_Fdez
 
Funciones de grupo
Funciones de grupoFunciones de grupo
Funciones de grupoEmily_Fdez
 
Funciones de grupo
Funciones de grupoFunciones de grupo
Funciones de grupoEmily_Fdez
 

Mehr von Emily_Fdez (16)

Consultas
ConsultasConsultas
Consultas
 
Consultas
ConsultasConsultas
Consultas
 
Practica1
Practica1Practica1
Practica1
 
Practica1
Practica1Practica1
Practica1
 
Sql
SqlSql
Sql
 
Linux
LinuxLinux
Linux
 
Panel de control
Panel de controlPanel de control
Panel de control
 
Panel de control
Panel de controlPanel de control
Panel de control
 
Nucleo del sistema operativo
Nucleo del sistema operativoNucleo del sistema operativo
Nucleo del sistema operativo
 
Sistemas operativos por servicio
Sistemas operativos por servicioSistemas operativos por servicio
Sistemas operativos por servicio
 
Unidad de control
Unidad de controlUnidad de control
Unidad de control
 
Estructura del sistema operativo
Estructura del sistema operativoEstructura del sistema operativo
Estructura del sistema operativo
 
Funciones de grupo
Funciones de grupoFunciones de grupo
Funciones de grupo
 
Funciones de grupo
Funciones de grupoFunciones de grupo
Funciones de grupo
 
Funciones de grupo
Funciones de grupoFunciones de grupo
Funciones de grupo
 
Ddl
DdlDdl
Ddl
 

Funciones de sql server

  • 1. Funciones de SQL server ¿Qué es SQL? Funciones Básicas SQL es un lenguaje universal dedicado a las bases de datos. Es un lenguaje de sintaxis simple y muy potente. Mediante él se puede recorrer, modificar o borrar registros de las tablas de datos. Propiedad SELECT: Hace la selección en una tabla de la BD. SELECT * FROM datos 'Esta sentencia seleccionaría todos, absolutamente todos los registros dentro de la tabla datos. SELECT * FROM datos WHERE usuario='Juan' Seleccionaríamos todos los registros dentro de la tabla datos que tengan como usuario a "Juan". Propiedad INSERT INTO: Agrega un nuevo registro a la tabla elegida INSERT INTO datos (usuario) VALUES ('corsa') Insertamos en la tabla datos en la columna usuario, un registro nuevo. INSERT INTO datos (usuario, edad) VALUES ('corsa',20) Aquí insertamos 2 registros al mismo tiempo. Propiedad DELETE: Borra registros de nuestra tabla DELETE FROM datos WHERE usuario = 'Pedrito' 'Borramos los registros donde el usuario sea "Pedrito". DELETE FROM datos WHERE usuario = 'Mario' AND edad = 16 Borramos solo los usuario de nombre Mario que tenían 16 años. Propiedad UPDATE: Actualiza registros, modificando datos ya existentes. UPDATE datos SET usuario = 'Pedrito' Esta modificación renombrará todos los usuarios a "Pedrito". Tipos de funciones Funciones de conjuntos de filas: Devuelven un objeto que se puede usar como las referencias a tablas en una instrucción SQL. Funciones de agregado: Operan sobre una colección de valores y devuelven un solo valor de resumen. Funciones de categoría: Devuelven un valor de categoría para cada fila de una partición. Funciones escalares: Operan sobre un valor y después devuelven otro valor. Las funciones escalares se pueden usar donde la expresión sea válida. Funciones de cadena Las funciones de cadena trabajan con campos char y varchar por lo que los literales que escribamos se deben encerrar entre comillas simples. Estas funciones que vamos a explicar a continuación pueden manipular cadenas de letras u otros caracteres por lo que las vamos a dividir en dos grupos: Funciones que devuelven caracteres Este tipo de funciones devuelven un carácter o varios caracteres. Función Propósito CHR(n) Nos devuelve el carácter cuyo valor en binario es n CONCAT Nos devuelve cad1 concatenada con cad2 UPPER Convierte cad a mayúsculas LOWER Convierte cad a minúsculas LPAD Con esta función añadimos caracteres a cad1 por la izquierda hasta una longitud máxima dada por n INITCAP Convierte la primera letra de cad a mayúscula LTRIM Elimina un conjunto de caracteres a la izquierda de cad, siendo set el conjunto de
  • 2. caracteres a eliminar RPAD Con esta función añadimos caracteres de la misma forma que con la función LPAD pero esta vez los añadimos a la derecha RTRIM Hace lo mismo que LTRIM pero por la derecha REPLACE Sustituye un conjunto de caracteres de 0 o más caracteres, devuelve cad con cada ocurrencia de cadena_buscada sustituida por cadena_sustitucion SUBSTR Devuelve la subcadena de cad que abarca desde m hasta el numero de caracteres dados por n. TRANSLATE Convierte caracteres de una cadena en caracteres diferentes. Devuelve cad1 con los caracteres encontrados en cad2 y sustituidos por los caracteres de cad3 Ponemos algunos ejemplos de utilización de estas funciones: Sentencia sql que nos devuelve las letras cuyo valor asccii es el 45 y el 23 select CHR(45), CHR(23) FROM TABLA; Sentencia sql que obtiene el nombre de los alumnos sacando por pantalla la siguiente frase: el nombre del alumno es (nombre que está almacenado en la tabla) select CONCAT ('el nombre de alumno es', nombre) from alumno; Sentencia sql que me devuelve los nombres de los alumnos en mayúsculas select UPPER(nombre) from alumno; Sentencia sql que obtiene de un campo nombre, las 3 primeras letras select SUBSTR(nombre,0,3) from alumno; Y asi con el resto de funciones… Funciones que devuelven valores numéricos Estas funciones nos devuelven números a modo de información. Función Propósito ASCII(cad) Devuelve el valor ASCII de la primera letra de cad INSTR(cad1, cad2[,comienzo[,m]]) Función que busca un conjunto de caracteres dentro de una cadena. Nos devuelve la posición de cad2 en cad1 empezando a buscar en comienzo LENGTH(cad) Devuelve en número de caracteres de cad Como con las funciones anteriores dejamos unos ejemplos para que veáis su funcionamiento. Sentencia sql que nos devuelve el valor ASCII de la letra ('s') select ASCII('s') from tabla; Sentencia que nos devuelve la posición de la ocurrencia 'pe' dentro de la cadena 'Los perros están bien' a partir de la posición 2 select INSTR('Los perros están bien','pe',2) from tabla; Sentencia sql que nos devuelve el numero de caracteres de los nombres de los alumnos select LENGTH(nombre) from alumnos; Funciones en línea Las funciones en línea son las funciones que devuelven un conjunto de resultados correspondientes a la ecuación de una sentencia SELECT. El siguiente ejemplo muestra cómo crear una función en línea.
  • 3. CREATE FUNCTION fn_MovimientosCuenta ( @NumCuenta VARCHAR(20) ) RETURNS TABLE AS RETURN ( SELECT MOVIMIENTOS.* FROM MOVIMIENTOS INNER JOIN CUENTAS ON MOVIMIENTOS.IDCUENTA = CUENTAS.IDCUENTA WHERE CUENTAS.NUMCUENTA = @NumCuenta ) No podemos utilizar la clausula ORDER BY en la sentencia de una función el línea. Las funciones en línea pueden utilizarse dentro de joins o querys como si fueran una tabla normal. SELECT * FROM fn_MovimientosCuenta('200700000001') SELECT * FROM CUENTAS INNER JOIN CUENTAS_CLIENTE ON CUENTAS_CLIENTE.IDCUENTA = CUENTAS.IDCUENTA INNER JOIN CLIENTES ON CLIENTES.id = CUENTAS_CLIENTE.IDCLIENTE INNER JOIN fn_MovimientosCuenta('200700000001') A ON A.IDCUENTA= CUENTAS.IDCUENTA Tipos de datos de fecha y hora En la tabla siguiente se enumeran los tipos de datos de fecha y hora de Transact-SQL. Tamaño de Despl Tipo de almacenam Formato Intervalo Precisión Precisión azami datos iento ento (bytes) time hh:mm:ss[.nnnn De 00:00:00.0000000 a 100 De 3 a 5 Sí No nnn] 23:59:59.9999999 nanosegundo date AAAA-MM-DD De 0001-01-01 a 9999-12-31 1 día 3 No No smalldate AAAA-MM-DD De 1900-01-01 a 2079-06-06 1 minuto 4 No No time hh:mm:ss date time AAAA-MM-DD De 1753-01-01 a 9999-12-31 0,00333 8 No No hh:mm:ss[.nnn] segundos datetime AAAA-MM-DD De 0001-01-01 00:00:00.0000000 a 100 De 6 a 8 Sí No 2 hh:mm:ss 9999-12-31 23:59:59.9999999 nanosegundo datetimeo AAAA-MM-DD De 0001-01-01 100 De 8 a 10 Sí Sí ffset hh:mm:ss[.nnnn 00:00:00.0000000 a 9999-12- nanosegundo nnn] [+|]hh:mm 31 23:59:59.9999999 (en UTC) NOTA El tipo de datos rowversion de Transact-SQL no es un tipo de datos de fecha y hora. timestamp es un sinónimo obsoleto de rowversión.
  • 4. Funciones de fecha y hora En las tablas siguientes se enumeran las funciones de fecha y hora de Transact-SQL. Para obtener más información acerca del determinismo, vea Funciones deterministas y no deterministas. Funciones que obtienen valores de fecha y hora del sistema Todos los valores de fecha y hora del sistema se derivan del sistema operativo del equipo en el que se ejecuta la instancia de SQL Server. Funciones de fecha y hora del sistema de precisión elevada SQL Server 2008 R2 obtiene los valores de fecha y hora utilizando la API de Windows GetSystemTimeAsFileTime(). La exactitud depende del hardware del equipo y de la versión de Windows en las que la instancia de SQL Server se esté ejecutando. La precisión de esta API se fija en 100 nanosegundos. La precisión se puede determinar mediante la API de Windows GetSystemTimeAdjustment(). Función Sintaxis Valor devuelto Tipo de Determinis datos mo SYSDATETIME SYSDATETIME () Devuelve un valor datetime2(7) que contiene la fecha y datetime2 No hora del equipo en el que la instancia de SQL Server se determinista está ejecutando. El ajuste de zona horaria no está incluido. SYSDATETIMEO SYSDATETIMEOFFSET Devuelve un valor datetimeoffset(7) que contiene la datetimeoffset No FFSET ( ) fecha y hora del equipo en el que la instancia de SQL determinista Server se está ejecutando. El ajuste de zona horaria está incluido. SYSUTCDATETIME ( ) Devuelve un valor datetime2(7) que contiene la fecha y datetime2 No SYSUTCDATETI hora del equipo en el que la instancia de SQL Server se determinista ME está ejecutando. La fecha y hora se devuelven como hora universal coordinada (UTC). Funciones de fecha y hora del sistema de precisión baja Función Sintaxis Valor devuelto Tipo de Determinismo datos devuelto CURRENT_TIMESTAMP CURRENT_TIMESTAMP Devuelve un valor que contiene la fecha y hora del datetime No determinista equipo en el que la instancia de SQL Server se está ejecutando. GETDATE GETDATE ( ) Devuelve un valor que contiene la fecha y hora del datetime No determinista equipo. El ajuste de zona horaria no está incluido. GETUTCDATE GETUTCDATE ( ) Devuelve un valor que contiene la fecha y hora del datetime No determinista equipo. La fecha y hora se devuelven como una hora universal coordinada (UTC).
  • 5. Funciones que obtienen partes de la fecha y hora Función Sintaxis Valor devuelto Tipo Determinismo DATENAME DATENAME Devuelve una cadena de caracteres que representa el datepart nvarchar No determinista (datepart date) especificado de la fecha especificada. DATEPART DATEPART Devuelve un entero que representa el datepart especificado int No determinista DAY DAY ( date ) Devuelve un entero que representa la parte del día de date int Determinista especificado. MONTH MONTH ( date ) Devuelve un entero que representa la parte del mes de un date int Determinista especificado. YEAR YEAR ( date ) Devuelve un entero que representa la parte del año de un date int Determinista especificado. Funciones escalares Categoría de la función Funciones de configuración: Devuelven información acerca de la configuración actual. Funciones criptográficas: Admiten cifrado, descifrado, firma digital y la validación de firmas digitales. Funciones del cursor: Devuelven información acerca de los cursores. Funciones de tipo de datos : Devuelven información sobre los valores de identidad y los valores de otros tipos de datos. Tipos de datos y funciones de fecha y hora: Llevan a cabo operaciones sobre un valor de entrada de fecha y hora, y devuelven un valor numérico, de cadena o de fecha y hora. Funciones matemáticas: Realizan cálculos basados en valores de entrada proporcionados como parámetros a las funciones y devuelven valores numéricos. Funciones de metadatos: Devuelven información acerca de la base de datos y los objetos de la base de datos. Funciones escalares ODBC: Devuelven información sobre funciones ODBC escalares en una instrucción Transact-SQL. Funciones de replicación: Devuelven información que se usa para administrar, supervisar y mantener la topología de replicación Funciones de seguridad: Devuelven información acerca de usuarios y roles. Funciones de cadena: Realizan operaciones en el valor de entrada de una cadena (char o varchar) y devuelven una cadena o un valor numérico. Funciones del sistema: Realizan operaciones y devuelven información acerca de valores, objetos y configuraciones de una instancia de SQL Server. Funciones estadísticas del sistema: Devuelven información estadística acerca del sistema. Funciones de texto e imagen: Realizan operaciones sobre los valores de entrada o columnas de texto o imagen, y devuelven información acerca del valor. Funciones de desencadenador: Devuelven información acerca de los desencadenadores.
  • 6. Determinismo de función Las funciones integradas de SQL Server son deterministas o no deterministas. Las funciones son deterministas cuando devuelven siempre el mismo resultado cada vez que se llaman con un conjunto específico de valores de entrada. Las funciones son no deterministas cuando es posible que devuelvan distintos resultados cada vez que se llaman con un mismo conjunto específico de valores de entrada. Para obtener más información, vea Funciones deterministas y no deterministas Intercalación de funciones Las funciones que toman una entrada de cadena de caracteres y devuelven una salida de cadena de caracteres utilizan la intercalación de la cadena de entrada para la salida. Las funciones que toman entradas que no son de caracteres y devuelven una cadena de caracteres utilizan la intercalación predeterminada de la base de datos actual para la salida. Las funciones que toman varias entradas de cadena de caracteres y devuelven una cadena de caracteres utilizan las reglas de prioridad de intercalación para establecer la intercalación de la cadena de salida. Para obtener más información, vea Prioridad de intercalación (Transact-SQL). Funciones escalares Las funciones escalares definidas por el usuario devuelven un único valor de datos del tipo definido en la cláusula RETURNS. Las funciones escalares en línea no tienen cuerpo; el valor escalar es el resultado de una sola instrucción. Para una función escalar de múltiples instrucciones, el cuerpo de la función, definido en un bloque BEGIN...END, contiene una serie de instrucciones Transact-SQL que devuelven el valor único. El tipo devuelto puede ser de cualquier tipo de datos excepto text, ntext, image, cursor y timestamp. En el ejemplo siguiente se crea una función escalar con múltiples instrucciones. La función toma un valor de entrada, ProductID, y devuelve un solo valor de datos, la cantidad agregada del producto especificado en el inventario. other Copiar USE AdventureWorks; GO IF OBJECT_ID (N'dbo.ufnGetInventoryStock', N'FN') IS NOT NULL DROP FUNCTION ufnGetInventoryStock; GO CREATE FUNCTION dbo.ufnGetInventoryStock(@ProductID int) RETURNS int AS -- Returns the stock level for the product. BEGIN DECLARE @ret int; SELECT @ret = SUM(p.Quantity) FROM Production.ProductInventory p WHERE p.ProductID = @ProductID AND p.LocationID = '6'; IF (@ret IS NULL) SET @ret = 0; RETURN @ret; END; GO Funciones integradas SQL Server proporciona las funciones integradas para ayudarle a realizar diversas operaciones. No se pueden modificar. Puede utilizar funciones integradas en instrucciones Transact-SQL para:
  • 7. Tener acceso a información de las tablas del sistema de SQL Server sin tener acceso a las tablas del sistema directamente. Para obtener más información, vea Usar las funciones del sistema. Realizar tareas habituales como SUM, GETDATE o IDENTITY. Para obtener más información, vea Funciones (Transact-SQL). Las funciones integradas devuelven tipos de datos escalares o table. Por ejemplo, @@ERROR devuelve 0 si la última instrucción Transact-SQL se ejecutó correctamente. Si la instrucción generó un error, @@ERROR devuelve el número de error. Y la función SUM( parameter) devuelve la suma de todos los valores del parámetro. Consultas agregadas La clausula GROUP BY combina los registros con valores idénticos en un único registro. Para cada registro se puede crear un valor agregado si se incluye una función SQL agregada, como por ejemplo Sum o Count, en la instrucción SELECT. Su sintaxis es: SELECT [ALL | DISTINCT ] <nombre_campo> [{,<nombre_campo>}] [{,<funcion_agregado>}] FROM <nombre_tabla>|<nombre_vista> [{,<nombre_tabla>|<nombre_vista>}] [WHERE <condicion> [{ AND|OR <condicion>}]] [GROUP BY <nombre_campo> [{,<nombre_campo >}]] [HAVING <condicion>[{ AND|OR <condicion>}]] [ORDER BY <nombre_campo>|<indice_campo> [ASC | DESC] [{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]] GROUP BY es opcional. Si se utiliza GROUP BY pero no existe una función SQL agregada en la instrucción SELECT se obtiene el mismo resultado que con una consulta SELECT DISTINCT. Los valores Null en los campos GROUP BY se agrupan y no se omiten. No obstante, los valores Null no se evalúan en ninguna de las funciones SQL agregadas. Todos los campos de la lista de campos de SELECT deben incluirse en la cláusula GROUP BY o como argumentos de una función SQL agregada. SELECT marca, modelo, SUM(numero_kilometros) FROM tCoches GROUP BY marca, modelo La cláusula HAVING Una vez que GROUP BY ha combinado los registros, HAVING muestra cualquier registro agrupado por la cláusula GROUP BY que satisfaga las condiciones de la cláusula HAVING. Se utiliza la cláusula WHERE para excluir aquellas filas que no desea agrupar, y la cláusula HAVING para filtrar los registros una vez agrupados. HAVING es similar a WHERE, determina qué registros se seleccionan. Una vez que los registros se han agrupado utilizando GROUP BY, HAVING determina cuáles de ellos se van a mostrar. HAVING permite el uso de funciones agregadas. SELECT marca, modelo, SUM(numero_kilometros) FROM tCoches WHERE marca <> 'BMW' GROUP BY marca, modelo HAVING SUM(numero_kilometros)>100000
  • 8. En el ejemplo anterior, no se cuentan los datos para todas las marcas menos "BMW", una vez que se han contado, se evalua HAVING, y el conjunto de resultados devuelve solo aquellos modelos con más de 100.000 km. AVG.- Calcula la media aritmética de un conjunto de valores contenidos en un campo especificado de una consulta. Su sintaxis es la siguiente En donde expr representa el campo que contiene los datos numéricos para los que se desea calcular la media o una expresión que realiza un cálculo utilizando los datos de dicho campo. La media calculada por Avg es la media aritmética (la suma de los valores dividido por el número de valores). La función Avg no incluye ningún campo Null en el cálculo. SELECT marca, modelo, AVG(numero_kilometros) FROM tCoches GROUP BY marca, modelo Count.- Calcula el número de registros devueltos por una consulta. Su sintaxis es la siguiente: En donde expr contiene el nombre del campo que desea contar. La función Count no cuenta los registros que tienen campos null a menos que expr sea el carácter comodín asterisco (*). Si utiliza un asterisco, Count calcula el número total de registros, incluyendo aquellos que contienen campos null. Count(*) es considerablemente más rápida que Count(Campo). SELECT COUNT(*) FROM tCoches; SELECT marca, COUNT(modelo) FROM tCoches GROUP BY marca; SELECT marca, COUNT(DISTINCT modelo) FROM tCoches GROUP BY marca; Max, Min Devuelven el mínimo o el máximo de un conjunto de valores contenidos en un campo especifico de una consulta. Su sintaxis es: En donde expr es el campo sobre el que se desea realizar el cálculo. Expr pueden incluir el nombre de un campo de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario pero no otras de las funciones agregadas de SQL). SELECT marca, modelo, MIN(numero_kilometros) , MAX(numero_kilometros) FROM tCoches GROUP BY marca, modelo Sum.- Devuelve la suma del conjunto de valores contenido en un campo especifico de una consulta. Su sintaxis es: En donde expr respresenta el nombre del campo que contiene los datos que desean sumarse o una expresión que realiza un cálculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombre de un campo de una tabla, una constante o una función (la cual puede ser intrínseca o definida por el usuario pero no otras de las funciones agregadas de SQL). SELECT marca, modelo, SUM(numero_kilometros) FROM tCoches GROUP BY marca, modelo Funciones de valores simples: ABS(n)= Devuelve el valor absoluto de (n). CEIL(n)=Obtiene el valor entero inmediatamente superior o igual a "n". FLOOT(n) = Devuelve el valor entero inmediatamente inferior o igual a "n".
  • 9. MOD (m, n)= Devuelve el resto resultante de dividir "m" entre "n". NVL (valor, expresión)= Sustituye un valor nulo por otro valor. POWER (m, exponente)= Calcula la potencia de un numero. ROUND (numero [, m])= Redondea números con el numero de dígitos de precisión indicados. SIGN (valor)= Indica el signo del "valor". SQRT(n)= Devuelve la raíz cuadrada de "n". TRUNC (numero, [m])= Trunca números para que tengan una cierta cantidad de dígitos de precisión. VAIRANCE (valor)= Devuelve la varianza de un conjunto de valores. Funciones de grupos de valores: AVG(n)= Calcula el valor medio de "n" ignorando los valores nulos. COUNT (* | Expresión)= Cuenta el numero de veces que la expresión evalúa algún dato con valor no nulo. La opción "*" cuenta todas las filas seleccionadas. MAX (expresión)= Calcula el máximo. MIN (expresión)= Calcula el mínimo. SUM (expresión)= Obtiene la suma de los valores de la expresión. GREATEST (valor1, valor2…)= Obtiene el mayor valor de la lista. LEAST (valor1, valor2…)= Obtiene el menor valor de la lista. Funciones que devuelven valores de caracteres: CHR(n) = Devuelve el carácter cuyo valor en binario es equivalente a "n". CONCAT (cad1, cad2)= Devuelve "cad1" concatenada con "cad2". LOWER (cad)= Devuelve la cadena "cad" en minúsculas. UPPER (cad)= Devuelve la cadena "cad" en mayúsculas. INITCAP (cad)= Convierte la cadena "cad" a tipo titulo. LPAD (cad1, n[,cad2])= Añade caracteres a la izquierda de la cadena hasta que tiene una cierta longitud. RPAD (cad1, n[,cad2])= Añade caracteres a la derecha de la cadena hasta que tiene una cierta longitud. LTRIM (cad [,set])= Suprime un conjunto de caracteres a la izquierda de la cadena. RTRIM (cad [,set])= Suprime un conjunto de caracteres a la derecha de la cadena. REPLACE (cad, cadena_busqueda [, cadena_sustitucion])= Sustituye un carácter o caracteres de una cadena con 0 o mas caracteres. SUBSTR (cad, m [,n])= Obtiene parte de una cadena. TRANSLATE (cad1, cad2, cad3)= Convierte caracteres de una cadena en caracteres diferentes, según un plan de sustitución marcado por el usuario. Funciones que devuelven valores numéricos: ASCII(cad)= Devuelve el valor ASCII de la primera letra de la cadena "cad". INSTR (cad1, cad2 [, comienzo [,m]])= Permite una búsqueda de un conjunto de caracteres en una cadena pero no suprime ningún carácter después. LENGTH (cad)= Devuelve el numero de caracteres de cad. Funciones de conversión: TO_CHAR= Transforma un tipo DATE ó NUMBER en una cadena de caracteres. TO_DATE= Transforma un tipo NUMBER ó CHAR en DATE. TO_NUMBER= Transforma una cadena de caracteres en NUMBER.
  • 10. Funciones en línea de múltiples sentencias Las funciones en línea de múltiples sentencias son similares a las funciones en línea excepto que el conjunto de resultados que devuelven puede estar compuesto por la ejecución de varios consultas SELECT. El siguiente ejemplo muestra el uso de una función de tabla de multi sentencias. /* Esta función busca la tres cuentas con mayor saldo * y obtiene los tres últimos movimientos de cada una * de estas cuentas */ CREATE FUNCTION fn_CuentaMovimietos() RETURNS @datos TABLE ( -- Estructura de la tabla que devuelve la funcion. NumCuenta varchar(20), Saldo decimal(10,2), Saldo_anterior decimal(10,2), Saldo_posterior decimal(10,2), Importe_Movimiento decimal(10,2), FxMovimiento datetime ) AS BEGIN -- Variables necesarias para la lógica de la funcion. DECLARE @idcuenta int, @numcuenta varchar(20), @saldo decimal(10,2) -- Cursor con las 3 cuentas de mayor saldo DECLARE CDATOS CURSOR FOR SELECT TOP 3 IDCUENTA, NUMCUENTA, SALDO FROM CUENTAS ORDER BY SALDO DESC OPEN CDATOS FETCH CDATOS INTO @idcuenta, @numcuenta, @saldo -- Recorremos el cursor WHILE (@@FETCH_STATUS = 0) BEGIN -- Insertamos la cuenta en la variable de salida INSERT INTO @datos (NumCuenta, Saldo) VALUES (@numcuenta, @saldo) -- Insertamos los tres últimos movimientos de la cuenta INSERT INTO @datos (Saldo_anterior, Saldo_posterior, Importe_Movimiento, FxMovimiento ) SELECT TOP 3 SALDO_ANTERIOR, SALDO_POSTERIOR, IMPORTE, FXMOVIMIENTO FROM MOVIMIENTOS WHERE IDCUENTA = @idcuenta ORDER BY FXMOVIMIENTO DESC -- Vamos a la siguiente cuenta FETCH CDATOS INTO @idcuenta, @numcuenta, @saldo
  • 11. END CLOSE CDATOS; DEALLOCATE CDATOS; RETURN END Para ejecutar la función: select * from fn_CuentaMovimietos() Funciones de conversión caracteres LOWER: Convierte a minúsculas. UPPER: Convierte a mayúsculas. INITCAP: Convierte la primera letra de cada palabra en mayúsculas, y el resto en minúscula. Atención: Usar una función de conversión dentro de la cláusula WHERE puede ser altamente ineficiente porque si la columna afectada forma parte de un índice éste lo desactiva, provocando un bajo rendimiento. Funciones manipulación caracteres CONCAT: Concatena dos valores. SUBSTR: Extrae una subcadena. LENGTH: Devuelve la longitud de la cadena. INSTR: Devuelve la posición de un carácter o subcadena. LPAD: Justifica a la derecha la cadena. RPAD: Justifica a la izquierda la cadena. Funciones Numéricas ROUND (columna | expresión, n) Redondea a n posiciones decimales. Si se omite n, no se redondea con decimales. Si n es negativo, los números a la izquierda del punto decimal se redondean a decenas, centenas, ... TRUNC (columna | expresión, n) Trunca en la enésima posición decimal. Si se omite n, sin lugares decimales. Si n es negativa, los números a la izquierda del punto decimal se truncan a cero. MOD (m, n) Devuelve el resto de la división de m por n. Ejemplos de funciones numéricas SQL> SELECT ROUND (45.923, 2), ROUND (45.923, 0), ROUND (45.923, -1) FROM SYS.DUAL; Resultado: 45.92 46 50 SQL> SELECT TRUNC (45.923, 2), TRUNC (45,923), TRUNC (45.923, -1) FROM SYS.DUAL; Resultado: 45.92 45 40 Funciones de conversión Conversión Implícita de datos  De VARCHAR2 o CHAR a NUMBER  De VARCHAR2 o CHAR a DATE  De NUMBER a VARCHAR2  De DATE a VARCHAR2
  • 12. Funciones de conversión TO_CHAR (número | fecha [,’fmt’]) Convierte un número o fecha en una cadena de caracteres VARCHAR2 con el modelo de formato fmt.  9: Representa un número  0: Fuerza a que se muestra el cero  $: Signo de dólar  L: Usa el signo de moneda local  .: Imprime el punto decimal  ;: Imprime el indicador de millar  Para fechas, los fmt anteriores. Funciones de conversión TO_NUMBER (char) Convierte una cadena de caracteres con dígitos en un número. TO_DATE (char [,’fmt’]) Convierte una cadena de caracteres representando una fecha en un valor de fecha según el fmt especificado. Si se omite el fmt, el formato es DD-MON-YY. NVL (expr1, expr2) Convierte un nulo (expr1) a un valor de tipo fecha, cadena o número (expr2). La Función DECODE Hace las veces de sentencia CASE o IF-THEN-ELSE, para facilitar consultas condicionales. Descifra una expresión después de compararla con cada valor de búsqueda. Si la expresión es la misma que la búsqueda, se devuelve el resultado. Si se omite el valor por defecto, se devolverá un valor nulo donde una búsqueda no coincida con ninguno de los valores resultantes.