Ricerca…


Parametri

Parametro Dettagli
character_expression la stringa esistente nei tuoi dati
posizione di partenza la posizione in character_expression per eliminare la length e quindi inserire la replacement_string
lunghezza il numero di caratteri da eliminare da character_expression
replacement_string la sequenza di caratteri da inserire in character_expression

Sostituzione base dei caratteri con STUFF ()

La funzione STUFF() inserisce una stringa in un'altra stringa eliminando prima un numero specificato di caratteri. Nell'esempio seguente, cancella "Svr" e lo sostituisce con "Server". Ciò accade specificando la start_position e la length della sostituzione.

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

L'esecuzione di questo esempio comporterà la restituzione della SQL Server Documentation anziché della SQL Svr Documentation.

Utilizzo di FOR XML per concatenare valori da più righe

Un uso comune per la funzione FOR XML consiste nel concatenare i valori di più righe.

Ecco un esempio utilizzando la tabella Clienti :

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

Nell'esempio sopra, FOR XML PATH('')) viene utilizzato per concatenare gli indirizzi di posta elettronica, utilizzando ; come il carattere delimitatore. Inoltre, lo scopo di STUFF è quello di rimuovere il leader ; dalla stringa concatenata. STUFF esegue anche il casting implicito della stringa concatenata da XML a varchar.

Nota: il risultato dell'esempio precedente sarà codificato in XML, il che significa che sostituirà < caratteri con &lt; ecc. Se non lo desideri, modifica FOR XML PATH('')) in FOR XML PATH, TYPE).value('.[1]','varchar(MAX)') , ad esempio:

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, '')

Questo può essere usato per ottenere un risultato simile a GROUP_CONCAT in MySQL o string_agg in PostgreSQL 9.0+, sebbene usiamo subquery invece di aggregati GROUP BY. (In alternativa, puoi installare un aggregato definito dall'utente come questo se stai cercando funzionalità più vicine a quelle di GROUP_CONCAT ).

Ottieni i nomi delle colonne separati da virgola (non 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

roba per la virgola separata nel server sql

FOR XML PATH e STUFF per concatenare più righe in una singola riga:

  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;

Esempio di base della funzione STUFF ().

STUFF (Original_Expression, Start, Length, Replacement_expression)

La funzione STUFF () inserisce Replace_expression, nella posizione iniziale specificata, insieme alla rimozione dei caratteri specificati usando il parametro Length.

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

L'esecuzione di questo esempio comporterà la restituzione della tabella indicata

Nome di battesimo Cognome E-mail StuffedEmail
Jomes Cacciatore [email protected] J*****[email protected]
Shyam Rathod [email protected] S*****[email protected]
ariete shinde [email protected] R ***** hotmail.com


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow