Buscar..


Parámetros

Parámetro Detalles
expresión_caracteres la cadena existente en sus datos
Posición de salida la posición en character_expression para eliminar la length y luego insertar la replacement_string
longitud el número de caracteres que se eliminarán de la expresión de character_expression
remplazo de cadena La secuencia de caracteres para insertar en character_expression

Reemplazo de personaje básico con STUFF ()

La función STUFF() inserta una cadena en otra cadena al eliminar primero un número específico de caracteres. El siguiente ejemplo, elimina "Svr" y lo reemplaza por "Servidor". Esto sucede al especificar la posición de start_position y la length del reemplazo.

SELECT STUFF('SQL Svr Documentation', 5, 3, 'Server')

La ejecución de este ejemplo dará como resultado la devolución de la SQL Server Documentation lugar de la SQL Server Documentation de SQL Svr Documentation.

Uso de FOR XML para concatenar valores de varias filas

Un uso común de la función FOR XML es concatenar los valores de varias filas.

Aquí hay un ejemplo usando la tabla Clientes :

SELECT 
    STUFF( (SELECT ';' + Email
        FROM Customers 
        where (Email is not null and Email <> '')
        ORDER BY Email ASC 
        FOR XML PATH('')), 
    1, 1, '')

En el ejemplo anterior, FOR XML PATH('')) se usa para concatenar direcciones de correo electrónico, usando ; Como el caracter delimitador. Además, el propósito de STUFF es eliminar el líder ; De la cadena concatenada. STUFF también está STUFF implícitamente la cadena concatenada de XML a varchar.

Nota: el resultado del ejemplo anterior será XML codificado, lo que significa que reemplazará < caracteres con &lt; etc. Si no desea esto, cambie FOR XML PATH('')) a FOR XML PATH, TYPE).value('.[1]','varchar(MAX)') , por ejemplo:

SELECT 
    STUFF( (SELECT ';' + Email
        FROM Customers 
        where (Email is not null and Email <> '')
        ORDER BY Email ASC 
        FOR XML PATH, TYPE).value('.[1]','varchar(900)'),
    1, 1, '')

Esto se puede usar para lograr un resultado similar a GROUP_CONCAT en MySQL o string_agg en PostgreSQL 9.0+, aunque usamos subconsultas en lugar de agregados de GROUP BY. (Como alternativa, puede instalar un agregado definido por el usuario como este si está buscando una funcionalidad más cercana a la de GROUP_CONCAT ).

Obtener nombres de columna separados por comas (no una lista)

/*
The result can be use for fast way to use columns on Insertion/Updates.
Works with tables and views.

Example: eTableColumns  'Customers'
ColumnNames
------------------------------------------------------
Id, FName, LName, Email, PhoneNumber, PreferredContact

INSERT INTO Customers (Id, FName, LName, Email, PhoneNumber, PreferredContact)
    VALUES (5, 'Ringo', 'Star', '[email protected]', NULL, 'EMAIL')
*/
CREATE PROCEDURE eTableColumns (@Table VARCHAR(100))
AS
SELECT ColumnNames = 
   STUFF( (SELECT ', ' +  c.name
FROM    
    sys.columns c
INNER JOIN 
    sys.types t ON c.user_type_id = t.user_type_id
WHERE
    c.object_id = OBJECT_ID( @Table)
        FOR XML PATH, TYPE).value('.[1]','varchar(2000)'),
    1, 1, '')
GO

Cosas para comas separadas en servidor sql

FOR XML PATH y STUFF para concatenar las múltiples filas en una sola fila:

  select distinct t1.id,
      STUFF(
             (SELECT ', ' + convert(varchar(10), t2.date, 120)
              FROM yourtable t2
              where t1.id = t2.id
              FOR XML PATH (''))
              , 1, 1, '')  AS date
    from yourtable t1;

Ejemplo básico de la función STUFF ().

STUFF (Original_Expression, Start, Length, Replacement_expression)

La función STUFF () inserta Replacement_expression, en la posición de inicio especificada, junto con la eliminación de los caracteres especificados usando el parámetro Length.

 Select FirstName, LastName,Email, STUFF(Email, 2, 3, '*****') as StuffedEmail From Employee

Ejecutar este ejemplo resultará en devolver la tabla dada

Nombre de pila Apellido Email StuffedEmail
Jomes Cazador [email protected] J*****[email protected]
Shyam Rathod [email protected] S*****[email protected]
RAM brillante [email protected] R ***** hotmail.com


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow