{"id":1863,"date":"2020-05-25T23:50:18","date_gmt":"2020-05-25T23:50:18","guid":{"rendered":"http:\/\/manualsqlserver.com\/?p=1863"},"modified":"2020-05-25T23:50:19","modified_gmt":"2020-05-25T23:50:19","slug":"funciones-trim-concat_ws-y-string_agg","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=1863","title":{"rendered":"Funciones Trim, Concat_WS y String_Agg"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"207\" height=\"266\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017__D.png\" alt=\"\" class=\"wp-image-1864\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Funciones Trim, Concat_WS y String_Agg de SQL Server 2017<\/h2>\n\n\n\n<p>En este art\u00edculo 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.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p style=\"font-size:26px\"><strong>Funci\u00f3n Trim<\/strong><\/p>\n\n\n\n<p>Elimina los espacios en blanco del inicio y final de una cadena de caracteres.<br>Elimina los caracteres especificados del inicio y final de una cadena de caracteres.<br><strong>Sintaxis:<\/strong><br><strong>Trim(Cadena Caracteres)<br>Trim(&#8216;Caracteres a eliminar&#8217; from &#8216;Cadena de Caracteres&#8217;)<\/strong><\/p>\n\n\n\n<p style=\"font-size:26px\"><strong>Ejemplos<\/strong><\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejercicio 1<\/strong><\/p>\n\n\n\n<p><strong>Eliminar los espacios de la cadena de caracteres<\/strong><br>select trim(&#8216;     Texto     &#8216;)<br>go<br>Si se mide la longitud del texto, el resultado tiene en cuenta la cantidad de<br>caracteres sin tener en cuenta los iniciales y finales<br>select Len(trim(&#8216;           Texto     &#8216;))<br>go<br><strong>El resultado es 5.<\/strong><\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejercicio 2<\/strong><\/p>\n\n\n\n<p><strong>Se puede especificar los caracteres que se desea que se eliminen del inicio o final de una cadena de caracteres<br>Elimina la coma del inicio y del final, antes de la palabra Texto hay tres espacios.<br><\/strong>select trim(&#8216;,&#8217; from &#8216;,,,   Texto ,,,,&#8217;)<br>go<br>select LEN(trim(&#8216;,&#8217; from &#8216;,,,   Texto ,,,,&#8217;))<br>go<br><strong>El resultado es 8, antes de la palabra Texto hay tres espacios, note que los espacios que hay despu\u00e9s de la palabra Texto no las tiene en cuenta.<\/strong><\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejercicio 3<\/strong><\/p>\n\n\n\n<p><strong>Elimina las letas abc del inicio y final. Note que no elimina la letra c porque encuentra al inicio la letra r<br><\/strong>select trim(&#8216;abc&#8217; from &#8216;abarca poco y hazlo bien abbbcc&#8217;)<br>go<br><strong>Resultado: rca poco y hazlo bien<\/strong><br><strong>Note que ha eliminado las letras \u00ababa\u00bb del inicio y las letras \u00ababbbcc\u00bb del final.<br><\/strong><\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejercicio 4<\/strong><\/p>\n\n\n\n<p><strong>Elimina las letas uf, el punto (.) y la coma (,) del inicio y final.<\/strong><br>Note que no elimina la coma que aparece despu\u00e9s de la palabra \u00abcasi\u00bb<br>select trim(&#8216;uf.,&#8217; from &#8216;uff, casi, no termino\u2026..&#8217;)<br>go<\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p style=\"font-size:26px\"><strong>Funci\u00f3n Concat_ws<\/strong><\/p>\n\n\n\n<p><strong>Retorna la concatenaci\u00f3n de una o mas cadenas de caracteres especificando el caracter o caracteres que lo separan.<\/strong><br>Sintaxis<br>Concat_ws(&#8216;separador&#8217;,Cadena1, Cadena2 [,Cadena3\u2026 ])<br>Donde<br>&#8216;separador&#8217;, es el caracter o caracteres que separar\u00e1n los textos a concatenar<br>Cadena1, Cadena2 [,Cadena3\u2026 ], textos a concatenar.<br><strong>Por ejemplo<\/strong><br>Select concat_ws(&#8216; &#8216;,&#8217;Trainer&#8217;,&#8217;SQL&#8217;,&#8217;Server&#8217;)<br>go<br>Resultado: Trainer SQL Server<\/p>\n\n\n\n<p><strong>Usando AdventureWorks2017<\/strong><br>use AdventureWorks2017<br>go<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejercicio 5<\/strong><\/p>\n\n\n\n<p><strong>Listar los registros de Person<\/strong><br>select Right(&#8216;000000000&#8217; + Trim(Str(BusinessEntityID)),10) As &#8216;C\u00f3digo&#8217;,<br>Lastname As &#8216;Apellido&#8217;,<br>CONCAT_WS(&#8216; &#8216;,FirstName, MiddleName) As &#8216;Nombres&#8217;,<br>CONCAT_WS(&#8216; &#8216;,FirstName, MiddleName, LastName) As &#8216;Nombre Completo&#8217;<br>from AdventureWorks2017.Person.Person<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_01.png\" alt=\"\" class=\"wp-image-1865\" width=\"723\" height=\"678\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_01.png 778w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_01-300x281.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_01-768x721.png 768w\" sizes=\"auto, (max-width: 723px) 100vw, 723px\" \/><\/figure>\n\n\n\n<p>Usando Northwind<br>use Northwind<br>go<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejercicio 6<\/strong><\/p>\n\n\n\n<p><strong>Listado de las \u00f3rdenes de Noviembre 1996, el Empleado y el cliente, incluir el total de la orden (<a href=\"https:\/\/manualsqlserver.com\/?p=215\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Joins<\/a>) (<a href=\"https:\/\/manualsqlserver.com\/?p=201\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Filtros<\/a>) (<a href=\"https:\/\/manualsqlserver.com\/?p=225\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Agrupamientos<\/a>)<br><\/strong>select O.OrderID As &#8216;N\u00ba Orden&#8217;,<br>Format(O.OrderDate,&#8217;dd\/MM\/yyyy&#8217;) As &#8216;Fecha&#8217;,<br>sum(D.Quantity * D.UnitPrice) As &#8216;Total Orden&#8217;,<br>Empleado = concat_ws(&#8216; &#8216;,E.TitleOfCourtesy,E.FirstName,E.LastName),<br>C.CompanyName As &#8216;Cliente&#8217;<br>from Orders As O<br>join Employees As E on O.EmployeeID =E.EmployeeID<br>join Customers As C on O.CustomerID = C.CustomerID<br>join [Order Details] As D on O.OrderID = D.OrderID<br>where MONTH(O.OrderDate) = 11 and YEAR(O.OrderDate) = 1996<br>group by O.OrderID, Format(O.OrderDate,&#8217;dd\/MM\/yyyy&#8217;),<br>concat_ws(&#8216; &#8216;,E.TitleOfCourtesy,E.FirstName,E.LastName), C.CompanyName<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_02.png\" alt=\"\" class=\"wp-image-1866\" width=\"716\" height=\"490\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_02.png 1018w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_02-300x206.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_02-768x527.png 768w\" sizes=\"auto, (max-width: 716px) 100vw, 716px\" \/><\/figure>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejercicio 7<\/strong><\/p>\n\n\n\n<p><strong>Listar los clientes, concatenar la direcci\u00f3n con los campos Country, City y Address separadas por coma.<br><\/strong>select CustomerID As &#8216;C\u00f3digo&#8217;,<br>CompanyName As &#8216;Cliente&#8217;,<br>Direccion = CONCAT_WS(&#8216;, &#8216;,Country,City, Address)<br>from Customers<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_03-1024x669.png\" alt=\"\" class=\"wp-image-1867\" width=\"748\" height=\"488\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_03-1024x669.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_03-300x196.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_03-768x501.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_03.png 1072w\" sizes=\"auto, (max-width: 748px) 100vw, 748px\" \/><figcaption>La direcci\u00f3n del cliente formada por los campos Pa\u00eds, Ciudad y Direcci\u00f3n.<\/figcaption><\/figure>\n\n\n\n<p style=\"font-size:26px\"><strong>Funci\u00f3n STRING_AGG<\/strong><\/p>\n\n\n\n<p><strong>Concatena un conjunto de valores asignando un caracter entre estos.<\/strong><br>Sintaxis<br>STRING_AGG (Expresi\u00f3n,Separador)<br>WITHIN GROUP ( ORDER BY [ ASC | DESC ] )<br>Donde<br>Expresi\u00f3n es la expresi\u00f3n que se va a concatenar, generalmente un nombre de campo<br>Separador es el caracter entre los elementos de Expresion<br>WITHIN GROUP ( ORDER BY [ ASC | DESC ] ) permite mostrar<br>los datos agrupados y ordenados<\/p>\n\n\n\n<p>Usando Northwind<br>use Northwind<br>go<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejercicio 8<\/strong><\/p>\n\n\n\n<p><strong>Listar los clientes separados por coma, la funci\u00f3n Char(44) devuelve la coma.<\/strong><br>SELECT STRING_AGG (CompanyName,Char(44)) AS Clientes<br>FROM Customers<br>go<br>Resultado: todos los clientes separados por coma.<br>Alfreds Futterkiste,Ana Trujillo Emparedados y helados,Antonio Moreno Taquer\u00eda,\u2026<\/p>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejercicio 9<\/strong><\/p>\n\n\n\n<p><strong>Cambiando el resultado de la consulta a texto en lugar de cuadr\u00edcula,  muestra el resultado un dato en cada l\u00ednea. Se puede cambiar pulsando Ctrl+T.  Listado de los clientes pulsando Enter al final de cada uno, Char(13) representa Enter.<\/strong><br>SELECT STRING_AGG (CompanyName,Char(13)) AS Clientes<br>FROM Customers<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_04.png\" alt=\"\" class=\"wp-image-1868\" width=\"677\" height=\"566\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_04.png 574w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_04-300x251.png 300w\" sizes=\"auto, (max-width: 677px) 100vw, 677px\" \/><\/figure>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejercicio 10<\/strong><\/p>\n\n\n\n<p><strong>Listado de los empleados<\/strong><br>SELECT STRING_AGG (CONCAT_WS(&#8216; &#8216;,LastName, FirstName),Char(13)) AS Empleados<br>FROM Employees<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_05.png\" alt=\"\" class=\"wp-image-1869\" width=\"546\" height=\"730\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_05.png 326w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_05-224x300.png 224w\" sizes=\"auto, (max-width: 546px) 100vw, 546px\" \/><\/figure>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejercicio 11<\/strong><\/p>\n\n\n\n<p><strong>Las categorias y los productos separados por coma (<a href=\"https:\/\/manualsqlserver.com\/?p=215\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Joins<\/a>) (<a href=\"https:\/\/manualsqlserver.com\/?p=195\" target=\"_blank\" rel=\"noreferrer noopener\">Ver Alias<\/a>)<\/strong><br>select C.CategoryID As &#8216;C\u00f3digo&#8217;,<br>C.CategoryName As &#8216;Categor\u00eda&#8217;,<br>Productos = STRING_AGG(P.ProductName,&#8217;,&#8217;)<br>from Categories As C<br>join Products As P on C.CategoryID = P.CategoryID<br>group by C.CategoryID, C.CategoryName<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_06-1024x377.png\" alt=\"\" class=\"wp-image-1870\" width=\"802\" height=\"295\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_06-1024x377.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_06-300x110.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_06-768x283.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_06.png 1152w\" sizes=\"auto, (max-width: 802px) 100vw, 802px\" \/><\/figure>\n\n\n\n<p style=\"font-size:22px\"><strong>Ejercicio 12<\/strong><\/p>\n\n\n\n<p>El listado anterior se puede ordenar los productos usando la cl\u00e1usula \u00abwithin group\u00bb<br>select C.CategoryID As &#8216;C\u00f3digo&#8217;,<br>C.CategoryName As &#8216;Categor\u00eda&#8217;,<br>Productos = STRING_AGG(P.ProductName,&#8217;,&#8217;)<br>within group (order by P.ProductName asc)<br>from Categories As C<br>join Products As P on C.CategoryID = P.CategoryID<br>group by C.CategoryID, C.CategoryName<br>go<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_07-1024x354.png\" alt=\"\" class=\"wp-image-1871\" width=\"802\" height=\"277\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_07-1024x354.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_07-300x104.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_07-768x266.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQLServer_FuncionesTexto2017_07.png 1214w\" sizes=\"auto, (max-width: 802px) 100vw, 802px\" \/><\/figure>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Funciones Trim, Concat_WS y String_Agg de SQL Server 2017 En este art\u00edculo 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.<\/p><p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=1863\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1864,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[200,201,131],"class_list":["post-1863","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-consultasdedatos","tag-concat_ws","tag-string_agg","tag-trim","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1863","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1863"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1863\/revisions"}],"predecessor-version":[{"id":1872,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1863\/revisions\/1872"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/1864"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1863"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1863"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1863"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}