Поиск…


параметры

параметр подробности
character_expression существующая строка в ваших данных
начальная_позиция положение в character_expression выражении для удаления length а затем вставить replacement_string
длина количество символов для удаления из character_expression
replacement_string последовательность символов для вставки в character_expression

Замена основного символа с помощью STUFF ()

Функция STUFF() вставляет строку в другую строку, сначала удаляя указанное количество символов. В следующем примере удаляется «Svr» и заменяется на «Сервер». Это происходит, указывая start_position и length замены.

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

Выполнение этого примера приведет к возврату SQL Server Documentation вместо SQL Svr Documentation.

Использование FOR XML для объединения значений из нескольких строк

Одним из распространенных способов использования функции FOR XML является конкатенация значений нескольких строк.

Вот пример использования таблицы Customers :

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

В приведенном выше примере FOR XML PATH('')) используется для конкатенации адресов электронной почты, используя ; как символ разделителя. Кроме того, целью STUFF является удаление ведущего ; из конкатенированной строки. STUFF также неявно бросает конкатенированную строку из XML в varchar.

Примечание: результат из приведенного выше примера будет XML - кодировке, то есть он будет заменить < символы с &lt; и т. д. Если вы этого не хотите, измените FOR XML PATH('')) в FOR XML PATH, TYPE).value('.[1]','varchar(MAX)') , например:

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

Это можно использовать для достижения результата, аналогичного GROUP_CONCAT в MySQL или string_agg в PostgreSQL 9.0+, хотя мы используем подзапросы вместо агрегатов GROUP BY. (В качестве альтернативы вы можете установить определяемый пользователем агрегат, такой как этот, если вы ищете функциональность, близкую к функциональности GROUP_CONCAT ).

Получить имена столбцов, разделенные запятой (не список)

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

материал для запятой, разделенный на сервере sql

FOR XML PATH и STUFF объединить несколько строк в одну строку:

  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;

Основной пример функции STUFF ().

STUFF (Original_Expression, Start, Length, Replacement_expression)

Функция STUFF () вставляет значение Replacement_expression в указанной начальной позиции вместе с удалением символов, заданных параметром Length.

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

Выполнение этого примера приведет к возврату данной таблицы

Имя Фамилия Эл. адрес StuffedEmail
Jomes охотник [email protected] J*****[email protected]
Shyam rathod [email protected] S*****[email protected]
Баран Shinde [email protected] R ***** hotmail.com


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow