Microsoft SQL Server
De STUFF-functie
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 <
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 | StuffedEmail | |
---|---|---|---|
Jomes | Jager | [email protected] | J*****[email protected] |
Shyam | Rathod | [email protected] | S*****[email protected] |
RAM | Shinde | [email protected] | R ***** hotmail.com |