Zoeken…


parameters

Parameter Details
character_expression de bestaande tekenreeks in uw gegevens
begin positie de positie in character_expression om de length te verwijderen en vervolgens de replacement_string string in te voegen
lengte het aantal tekens dat moet worden verwijderd uit character_expression
replacement_string de reeks tekens die moet worden ingevoegd in character_expression

Basic Character Vervanging door STUFF ()

De functie STUFF() voegt een tekenreeks in een andere reeks in door eerst een bepaald aantal tekens te verwijderen. In het volgende voorbeeld wordt "Svr" verwijderd en vervangen door "Server". Dit gebeurt door de start_position en de length van de vervanging op te geven.

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

Als u dit voorbeeld SQL Svr Documentation. SQL Server Documentation SQL Svr Documentation. plaats van SQL Svr Documentation.

FOR XML gebruiken om waarden uit meerdere rijen samen te voegen

Een veel gebruikt voor de FOR XML functie is om de waarden van meerdere rijen samen te voegen.

Hier is een voorbeeld met de tabel Klanten :

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

In het bovenstaande voorbeeld wordt FOR XML PATH('')) gebruikt om e-mailadressen samen te voegen met behulp van ; als het scheidingsteken. Het doel van STUFF is ook het verwijderen van de leidende ; van de aaneengeschakelde reeks. STUFF werpt ook impliciet de aaneengeschakelde string van XML naar varchar.

Opmerking: het resultaat uit het bovenstaande voorbeeld is XML-gecodeerd, wat betekent dat het < tekens vervangt door &lt; enz. Als u dit niet wilt, wijzigt u FOR XML PATH('')) in FOR XML PATH, TYPE).value('.[1]','varchar(MAX)') , bijvoorbeeld:

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

Dit kan worden gebruikt om een resultaat te bereiken dat vergelijkbaar is met GROUP_CONCAT in MySQL of string_agg in PostgreSQL 9.0+, hoewel we subquery's gebruiken in plaats van GROUP BY-aggregaten. (Als alternatief kunt u een door de gebruiker gedefinieerd aggregaat zoals dit installeren als u functionaliteit zoekt die dichter bij die van GROUP_CONCAT ).

Verkrijg kolomnamen gescheiden met komma (geen lijst)

/*
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

dingen voor komma gescheiden in sql-server

FOR XML PATH en STUFF om de meerdere rijen samen te voegen in een enkele rij:

  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;

Basisvoorbeeld van de functie STUFF ().

STUFF (Original_Expression, Start, Length, Replacement_expression)

De functie STUFF () voegt Vervanging_expressie in op de opgegeven startpositie, samen met het verwijderen van de tekens die zijn opgegeven met de parameter Lengte.

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

Het uitvoeren van dit voorbeeld resulteert in het retourneren van de gegeven tabel

Voornaam Achternaam E-mail StuffedEmail
Jomes Jager [email protected] J*****[email protected]
Shyam Rathod [email protected] S*****[email protected]
RAM Shinde [email protected] R ***** hotmail.com


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow