수색…


매개 변수

매개 변수 세부
character_expression 데이터의 기존 문자열
start_position character_expression 의 위치에서 length 를 삭제 한 다음 replacement_string 을 삽입합니다.
길이 character_expression에서 삭제할 character_expression
replacement_string 문자의 순서에 삽입 character_expression

STUFF ()로 기본 문자 교체

STUFF() 함수는 먼저 지정된 수의 문자를 삭제하여 문자열을 다른 문자열에 삽입합니다. 다음 예제에서는 "Svr"을 삭제하고이를 "Server"로 바꿉니다. 이는 대체의 start_positionlength 를 지정하여 발생합니다.

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

이 예제를 실행하면 SQL Svr Documentation. 대신 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, TYPE).value('.[1]','varchar(MAX)') 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, '')

이것은 MySQL의 GROUP_CONCAT 또는 PostgreSQL 9.0+의 string_agg 와 비슷한 결과를 얻기 위해 사용할 수 있지만 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 PATHSTUFF 를 사용하여 여러 행을 단일 행으로 연결합니다.

  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
죠 메스 사냥꾼 [email protected] J*****[email protected]
시암 갈대 [email protected] S*****[email protected]
신드 [email protected] R ***** hotmail.com


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow