Microsoft SQL Server
STUFF 기능
수색…
매개 변수
매개 변수 | 세부 |
---|---|
character_expression | 데이터의 기존 문자열 |
start_position | character_expression 의 위치에서 length 를 삭제 한 다음 replacement_string 을 삽입합니다. |
길이 | character_expression에서 삭제할 character_expression |
replacement_string | 문자의 순서에 삽입 character_expression |
STUFF ()로 기본 문자 교체
STUFF()
함수는 먼저 지정된 수의 문자를 삭제하여 문자열을 다른 문자열에 삽입합니다. 다음 예제에서는 "Svr"을 삭제하고이를 "Server"로 바꿉니다. 이는 대체의 start_position
및 length
를 지정하여 발생합니다.
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로 인코딩됩니다. 즉, <
문자를 <
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 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 |
---|---|---|---|
죠 메스 | 사냥꾼 | [email protected] | J*****[email protected] |
시암 | 갈대 | [email protected] | S*****[email protected] |
램 | 신드 | [email protected] | R ***** hotmail.com |