Szukaj…


Parametry

Parametr Detale
wyrażenie_wyrażeniowe istniejący ciąg w twoich danych
pozycji startowej pozycja w character_expression aby usunąć length a następnie wstawić łańcuch_ replacement_string
długość liczba znaków do usunięcia z character_expression
zamiennik_ciągów sekwencja znaków do wstawienia w character_expression

Podstawowa zamiana znaków na STUFF ()

Funkcja STUFF() wstawia ciąg do innego ciągu, usuwając najpierw określoną liczbę znaków. Poniższy przykład usuwa „Svr” i zastępuje go „Server”. Dzieje się tak, określając pozycję start_position i length zamiany.

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

Wykonanie tego przykładu spowoduje zwrócenie SQL Server Documentation zamiast SQL Server Documentation SQL Svr Documentation.

Używanie FOR XML do łączenia wartości z wielu wierszy

Jednym z powszechnych zastosowań funkcji FOR XML jest łączenie wartości wielu wierszy.

Oto przykład z wykorzystaniem tabeli Klienci :

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

W powyższym przykładzie do konkatenacji adresów e-mail użyto FORMATU FOR XML PATH('')) ; jako znak separatora. Ponadto celem STUFF jest usunięcie wiodącego ; z połączonego łańcucha. STUFF pośrednio rzutuje także skonkatenowany ciąg znaków z XML na varchar.

Uwaga: wynik z powyższego przykładu będzie zakodowany w formacie XML, co oznacza, że zamieni < znaki na &lt; itp. Jeśli nie chcesz tego, zmień FOR XML PATH('')) na FOR XML PATH, TYPE).value('.[1]','varchar(MAX)') , np .:

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

Można to wykorzystać do osiągnięcia wyniku podobnego do GROUP_CONCAT w MySQL lub string_agg w PostgreSQL 9.0+, chociaż używamy podkwerend zamiast agregacji GROUP BY. (Alternatywnie możesz zainstalować agregat zdefiniowany przez użytkownika, taki jak ten, jeśli szukasz funkcji zbliżonej do funkcji GROUP_CONCAT ).

Uzyskaj nazwy kolumn oddzielone przecinkiem (nie 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

rzeczy dla przecinka oddzielone na serwerze sql

FOR XML PATH i STUFF aby połączyć wiele wierszy w jeden wiersz:

  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;

Podstawowy przykład funkcji STUFF ().

STUFF (Original_Expression, Start, Length, Replacement_expression)

Funkcja STUFF () wstawia wyrażenie_wyrażeniowe w określonej pozycji początkowej wraz z usuwaniem znaków określonych za pomocą parametru Długość.

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

Wykonanie tego przykładu spowoduje zwrócenie podanej tabeli

Imię Nazwisko E-mail StuffedEmail
Jomes Łowca [email protected] J*****[email protected]
Shyam rathod [email protected] S*****[email protected]
Baran shinde [email protected] R ***** hotmail.com


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow