FUNCIONES
SQL SERVER
2021
Rutina almacenada que recibe unos
parámetros escalares de entrada, luego
los procesa según el cuerpo definido de
la función y por último retorna un
resultado de un tipo específico que
Funciones permitirá cumplir un objetivo.
SQL Server proporciona numerosas
funciones integradas y permite crear
funciones definidas por el usuario.
Funciones de Sistema
Tipos de
Funciones Funciones definidas por el
usuario
SQL Server cuenta con una gran
variedad de funciones
Funciones del dependiendo de los valores o
Sistema configuraciones que deseamos
realizar.
Funciones de Agregado.
SUM, AVG, COUNT, MAX, MIN
Funciones de Fecha y Hora.
Funciones del GETDATE, DAY, MONTH, YEAR,
Sistema DATEADD, DATEDIF, ISADATE
Funciones Matemáticas.
ABS, RAND, LOG10, SQRT, POWER, TAN,
PI, RADIANS.
Funciones para fechas
FUNCIÓN DESCRIPCIÓN SINTAXIS
DATEADD Devuelve la fecha, agregando a la misma la cantidad DATEADD (datepart , number , date )
especificado en “number” a la parte de la fecha
indicado en “datepart”
DATEDIFF Devuelve el número de límites “datepart” de fecha DATEDIFF (datepart , startdate ,
entre dos fechas especificadas enddate )
DATENAME Devuelve una cadena de caracteres que representa DATENAME ( datepart , date )
el “datepart” de la fecha especificada
DATEPART Devuelve un entero que representa el datepart del DATEPART ( datepart , date )
date especificado.
DAY Devuelve un entero que representa la parte del día DAY (date)
de la fecha especificada
MONTH Devuelve un entero que representa el mes de date MONTH (date )
especificado.
YEAR Devuelve un entero que representa el año de date YEAR ( date )
especificado.
FUNCIONES PARA CADENAS
Funciones para cadenas
FUNCIÓN DESCRIPCIÓN SINTAXIS
LEFT Devuelve la parte izquierda de una cadena de LEFT ( character_expression ,
caracteres con el número de caracteres integer_expression )
especificado.
Devuelve el número de caracteres de la expresión LEN ( string_expression )
LEN de cadena especificada, excluidos los espacios en
blanco finales.
LOWER Devuelve una expresión de caracteres convirtiendo LOWER ( character_expression )
en minúsculas los caracteres en mayúsculas.
UPPER Devuelve una expresión de caracteres convirtiendo UPPER ( character_expression )
los caracteres en minúsculas a mayúsculas.
LTRIM Devuelve una expresión de caracteres quitando LTRIM ( character_expression )
todos los espacios iniciales en blanco.
RTRIM Devuelve una cadena de caracteres truncando todos RTRIM ( character_expression )
los espacios en blanco finales.
FUNCIONES PARA CONVERSIÓN
FUNCIÓN DESCRIPCIÓN SINTAXIS
CAST Convierte una CAST (expresión AS
expresión a un tipo_dato[(longitud)])
Funciones tipo de datos
para CONVERT
Convierte una
expresión a un
CONVERT (tipo_dato
[(longitud)], expresión)
conversión tipo de datos
indicando un
estilo.
Son rutinas que permiten
encapsular sentencias TRANSACT-
SQL que se ejecutan
frecuentemente.
Funciones
definidas por el Aceptan parámetros, realizan una
usuario acción, como un cálculo complejo y
devuelven el resultado de esa
acción como un valor (único o
conjunto de valores)
1. Funciones Escalares
Clasificación de las 2. Funciones con valores de tabla
funciones de varias instrucciones
definidas por el
3. Funciones con valores de tabla
usuario
en línea
Son aquellas funciones donde
retornan un valor único: tipo de
datos como int, Money, varchar,
Funciones real, etc. Pueden ser utilizadas en
Escalares cualquier lugar, incluso,
incorporada dentro de las
sentencias SQL.
CREATE FUNCTION Nombre_Función
(@parámetro1 as [Tipo Dato] = [ValorXDefecto],
@parámetro2 as [Tipo Dato] = [ValorXDefecto])
RETURNS TipoDato_Retornado
AS
Sintaxis
BEGIN
<Instrucciones>
RETURN Expresión_salida
END
CREATE FUNCTION calculaProm
( @num1 as decimal(10,2),
@num2 as decimal(10,2))
1. IMPLEMENTAR UNA RETURNS decimal(10,2)
FUNCIÓN QUE DEVUELVA EL AS
PROMEDIO DE DOS
NÚMEROS INGRESADOS BEGIN
POR EL USUSARIO.
Declare @promedio decimal(10,2)
Set @promedio = (@num1+@num2)/2
RETURN @promedio
END
Select dbo.calculaProm(15.2, 10.5)
as Promedio
Go
Ejecutando …
Print ‘El promedio es: ’ +
cast(dbo.calculaProm(15.2, 10.5) as
varchar(5))
CREATE FUNCTION COMPRA.PRECIOPROMEDIO()
RETURNS DECIMAL
AS
2 CREAR UNA FUNCIÓN BEGIN
QUE RETORNE EL PRECIO DECLARE @prom DECIMAL
PROMEDIO DE LOS
SELECT @PROM=AVG(TotalUnidades)
PRODUCTOS.
FROM Productos
RETURN @prom
END
GO
CREATE FUNCTION PEDIDO_CLIENTES
(@codigo VARCHAR(5))
RETURNS INT
AS
BEGIN
3 CREAR UNA FUNCIÓN
DONDE INGRESE EL ID DEL DECLARE @Q INT = 0
CLIENTE Y RETORNE LA SELECT @Q=COUNT(*)
CANTIDAD DE FROM PedidosCabe
PEDIDOS QUE REALIZÓ.
WHERE IdCliente=@codigo
RETURN @Q
END
GO
CREATE FUNCTION fechaLarga
( @fecha as date )
RETURNS varchar(20)
AS
4. IMPLEMENTAR UNA
FUNCIÓN QUE DEVUELVA BEGIN
UNA FECHA INGRESADA EN
FORMATO LARGO. Declare @fecLarga varchar(20)
(15/08/2018 15 de Set @fecLarga = concat(day(@fecha),
Agosto de 2018). ‘ de ‘, datename(month,@fecha),
‘ del ‘, year(@fecha))
RETURN @fecLarga
END
Select dbo.fechaLarga(‘26/06/2018’)
as Fecha Actual
go
Ejecutando …
Print ‘Hoy es: ’ +dbo.
fechaLarga(‘26/06/2018’)
Select nomEmpleado, apeEmpleado, fecNac
from Empleados
go
Ejecutando …
para la Base de Select nomEmpleado, apeEmpleado,
Datos fechaLarga (fecNac) as
[Fecha Nacimiento]
from Empleados
go
Las funciones de tabla en línea son
aquellas que devuelven la salida de
una simple declaración SELECT.
2. Funciones de
Tabla en Línea La salida se puede utilizar adentro
de JOINS o querys como si fuera
una tabla de estándar.
CREATE FUNCTION [propietario.] nombre_funcion
([{ @parameter tipo de dato [ = default]} [,..n]])
RETURNS TABLE
Sintaxis
[AS]
RETURN [(] Sentencia SQL [)]
CREATE FUNCTION provXprod
( @producto as varchar(30) )
RETURNS TABLE
5. IMPLEMENTAR UNA AS
FUNCIÓN DE TABLA EN
LÍNEA QUE MUESTRE LOS RETURN (select prod.IdProducto, prov.[IdProveedor],
REGISTROS DE LA TABLA prov.[nomProveedor], [nomProducto]
PROVEEDOR from Proveedores prov
DEPENDIENDO DEL
PRODUCTO. inner join productos prod
on prov.IdProveedor = prod.IdProveedor
where nomProducto = @producto)
go
Select *
from provXprod('monami')
Ejecutando … go
Ejecutando en la BD la función
definida…
Seleccionar
proveedores cuyo Select *
precio por unidad from provXprod('monami') as pxp
del producto X sea
inner join Productos as p
menor a 100
on pxp.idProducto = p.IdProducto
where p.precioUnidad<100
Son similares a los
3. Funciones de procedimientos almacenados
Tabla de excepto que devuelven una
Multisentencias tabla.
CREATE FUNCTION [propietario.] nombre_funcion
([{@parameter tipo de dato [ = default]} [,..n]])
RETURNS TABLE
[AS]
Sintaxis BEGIN
<Cuerpo de la función>
RETURN
END
CREATE FUNCTION ClientesPais
( @pais as varchar(30) )
RETURNS
@TABLA TABLE(CodigoCli VARCHAR(10),
NombreCli VARCHAR(50),
paisCli VARCHAR(30))
Defina una función AS
que retorne solo BEGIN
aquellos Clientes del INSERT INTO @TABLA
país X SELECT c.IdCliente, c.nomCliente, p.NombrePais
FROM [venta].[Clientes] c inner join [venta].[Paises] p on c.idpais =
p.idpais
where p.[NombrePais]=@pais
RETURN
END
SELECT *
Ejecutando … FROM ClientesPais('Bolivia')
GO