Funciones Trim, Concat_ws y String_agg SQL Server 2017

Funciones Trim, Concat_WS y String_Agg de SQL Server 2017

SQL Server provee funciones nuevas, este artículo describe las nuevas funciones Trim, la función Concat_ws y la función String_agg propias de SQL Server 2017.



Función Trim

Cómo usar la función Trim de SQL Server

  • 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
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. Este es el funcionamiento de la función antes de SQL Server 2017.

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.

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.

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.

Ejemplos

Select concat_ws(‘ ‘,’Trainer’,’SQL’,’Server’)
go

Resultado: «Trainer SQL Server»

Usando AdventureWorks2017
use AdventureWorks2017
go
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

— 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


— 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



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 ordenados

Ejemplos

Usando Northwind
use Northwind
go

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

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

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

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

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