Sök…


parametrar

Parameter detaljer
character_expression den befintliga strängen i dina data
start_position positionen i character_expression att radera length och sätt sedan in replacement_string
längd antalet tecken som ska raderas från character_expression
replacement_string sekvensen med tecken att infoga i character_expression

Grundläggande karaktärersättning med STUFF ()

STUFF() infogar en sträng i en annan sträng genom att först ta bort ett specificerat antal tecken. Följande exempel raderar "Svr" och ersätter det med "Server". Det här sker genom att ange start_position och length på ersättningen.

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

Att utföra detta exempel kommer att resultera i att SQL Server Documentation returneras istället för SQL Svr Documentation.

Använda FOR XML för att sammanfatta värden från flera rader

En vanlig användning för FOR XML funktionen är att sammanfoga värdena för flera rader.

Här är ett exempel med kundtabellen :

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

I exemplet ovan används FOR XML PATH('')) för att sammanfoga e-postadresser med ; som avgränsare karaktär. Syftet med STUFF är också att ta bort det ledande ; från den sammankopplade strängen. STUFF också implicit den sammanlänkade strängen från XML till varchar.

Obs! Resultatet från exemplet ovan kommer att vara XML-kodat, vilket betyder att det kommer att ersätta < tecken med &lt; etc. Om du inte vill ha det här, ändra FOR XML PATH('')) till FOR XML PATH, TYPE).value('.[1]','varchar(MAX)') , t.ex.:

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

Detta kan användas för att uppnå ett resultat som liknar GROUP_CONCAT i MySQL eller string_agg i PostgreSQL 9.0+, även om vi använder underkällor istället för GROUP BY-aggregat. (Som ett alternativ kan du installera ett användardefinierat aggregat som det här om du letar efter funktionalitet som är närmare den för GROUP_CONCAT ).

Få kolumnnamn separerade med komma (inte en 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

grejer för komma separerade i sql-server

FOR XML PATH och STUFF att sammanfoga flera rader i en enda rad:

  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;

Grundläggande exempel på STUFF () -funktion.

STUFF (original_uttryck, start, längd, utbyte_uttryck)

STUFF () -funktionen infogar ersättningsuttryck i den angivna startpositionen tillsammans med att ta bort de tecken som anges med parametern Längd.

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

Att utföra detta exempel kommer att resultera i att den givna tabellen returneras

Förnamn Efternamn E-post StuffedEmail
Jomes Jägare [email protected] J*****[email protected]
Shyam Rathod [email protected] S*****[email protected]
Bagge Shinde [email protected] R ***** hotmail.com


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow