Funciones Trim, Concat_WS y String_Agg

Funciones Trim, Concat_WS y String_Agg de SQL Server 2017

En este artículo mostramos las nuevas funciones de SQL Server 2017, las que trabajan con datos tipo texto y que son de importancia su uso. Las funciones son: Trim, Concat_ws y String_agg.

Función Trim

Elimina los espacios en blanco del inicio y final de una cadena de caracteres.
Elimina los caracteres especificados del inicio y final de una cadena de caracteres.
Sintaxis:
Trim(Cadena Caracteres)
Trim(‘Caracteres a eliminar’ from ‘Cadena de Caracteres’)

Ejemplos

Ejercicio 1

Eliminar los espacios de la cadena de caracteres
select trim(‘ Texto ‘)
go
Si se mide la longitud del texto, el resultado tiene en cuenta la cantidad de
caracteres sin tener en cuenta los iniciales y finales
select Len(trim(‘ Texto ‘))
go
El resultado es 5.

Ejercicio 2

Se puede especificar los caracteres que se desea que se eliminen del inicio o final de una cadena de caracteres
Elimina la coma del inicio y del final, antes de la palabra Texto hay tres espacios.
select trim(‘,’ from ‘,,, Texto ,,,,’)
go
select LEN(trim(‘,’ from ‘,,, Texto ,,,,’))
go
El resultado es 8, antes de la palabra Texto hay tres espacios, note que los espacios que hay después de la palabra Texto no las tiene en cuenta.

Ejercicio 3

Elimina las letas abc del inicio y final. Note que no elimina la letra c porque encuentra al inicio la letra r
select trim(‘abc’ from ‘abarca poco y hazlo bien abbbcc’)
go
Resultado: rca poco y hazlo bien
Note que ha eliminado las letras «aba» del inicio y las letras «abbbcc» del final.

Ejercicio 4

Elimina las letas uf, el punto (.) y la coma (,) del inicio y final.
Note que no elimina la coma que aparece después de la palabra «casi»
select trim(‘uf.,’ from ‘uff, casi, no termino…..’)
go

Función Concat_ws

Retorna la concatenación de una o mas cadenas de caracteres especificando el caracter o caracteres que lo separan.
Sintaxis
Concat_ws(‘separador’,Cadena1, Cadena2 [,Cadena3… ])
Donde
‘separador’, es el caracter o caracteres que separarán los textos a concatenar
Cadena1, Cadena2 [,Cadena3… ], textos a concatenar.
Por ejemplo
Select concat_ws(‘ ‘,’Trainer’,’SQL’,’Server’)
go
Resultado: Trainer SQL Server

Usando AdventureWorks2017
use AdventureWorks2017
go

Ejercicio 5

Listar los registros de Person
select Right(‘000000000’ + Trim(Str(BusinessEntityID)),10) As ‘Código’,
Lastname As ‘Apellido’,
CONCAT_WS(‘ ‘,FirstName, MiddleName) As ‘Nombres’,
CONCAT_WS(‘ ‘,FirstName, MiddleName, LastName) As ‘Nombre Completo’
from AdventureWorks2017.Person.Person
go

Usando Northwind
use Northwind
go

Ejercicio 6

Listado de las órdenes de Noviembre 1996, el Empleado y el cliente, incluir el total de la orden (Ver Joins) (Ver Filtros) (Ver Agrupamientos)
select O.OrderID As ‘Nº Orden’,
Format(O.OrderDate,’dd/MM/yyyy’) As ‘Fecha’,
sum(D.Quantity * D.UnitPrice) As ‘Total Orden’,
Empleado = concat_ws(‘ ‘,E.TitleOfCourtesy,E.FirstName,E.LastName),
C.CompanyName As ‘Cliente’
from Orders As O
join Employees As E on O.EmployeeID =E.EmployeeID
join Customers As C on O.CustomerID = C.CustomerID
join [Order Details] As D on O.OrderID = D.OrderID
where MONTH(O.OrderDate) = 11 and YEAR(O.OrderDate) = 1996
group by O.OrderID, Format(O.OrderDate,’dd/MM/yyyy’),
concat_ws(‘ ‘,E.TitleOfCourtesy,E.FirstName,E.LastName), C.CompanyName
go

Ejercicio 7

Listar los clientes, concatenar la dirección con los campos Country, City y Address separadas por coma.
select CustomerID As ‘Código’,
CompanyName As ‘Cliente’,
Direccion = CONCAT_WS(‘, ‘,Country,City, Address)
from Customers
go

La dirección del cliente formada por los campos País, Ciudad y Dirección.

Función STRING_AGG

Concatena un conjunto de valores asignando un caracter entre estos.
Sintaxis
STRING_AGG (Expresión,Separador)
WITHIN GROUP ( ORDER BY [ ASC | DESC ] )
Donde
Expresión es la expresión que se va a concatenar, generalmente un nombre de campo
Separador es el caracter entre los elementos de Expresion
WITHIN GROUP ( ORDER BY [ ASC | DESC ] ) permite mostrar
los datos agrupados y ordenados

Usando Northwind
use Northwind
go

Ejercicio 8

Listar los clientes separados por coma, la función Char(44) devuelve la coma.
SELECT STRING_AGG (CompanyName,Char(44)) AS Clientes
FROM Customers
go
Resultado: todos los clientes separados por coma.
Alfreds Futterkiste,Ana Trujillo Emparedados y helados,Antonio Moreno Taquería,…

Ejercicio 9

Cambiando el resultado de la consulta a texto en lugar de cuadrícula, muestra el resultado un dato en cada línea. Se puede cambiar pulsando Ctrl+T. Listado de los clientes pulsando Enter al final de cada uno, Char(13) representa Enter.
SELECT STRING_AGG (CompanyName,Char(13)) AS Clientes
FROM Customers
go

Ejercicio 10

Listado de los empleados
SELECT STRING_AGG (CONCAT_WS(‘ ‘,LastName, FirstName),Char(13)) AS Empleados
FROM Employees
go

Ejercicio 11

Las categorias y los productos separados por coma (Ver Joins) (Ver Alias)
select C.CategoryID As ‘Código’,
C.CategoryName As ‘Categoría’,
Productos = STRING_AGG(P.ProductName,’,’)
from Categories As C
join Products As P on C.CategoryID = P.CategoryID
group by C.CategoryID, C.CategoryName
go

Ejercicio 12

El listado anterior se puede ordenar los productos usando la cláusula «within group»
select C.CategoryID As ‘Código’,
C.CategoryName As ‘Categoría’,
Productos = STRING_AGG(P.ProductName,’,’)
within group (order by P.ProductName asc)
from Categories As C
join Products As P on C.CategoryID = P.CategoryID
group by C.CategoryID, C.CategoryName
go