SUBSTRING(Transact-SQL)
적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) Microsoft Fabric의 SQL 분석 엔드포인트 Microsoft Fabric의 웨어하우스
SQL Server에서 문자, 이진, 텍스트 또는 이미지 식의 일부를 반환합니다.
구문
SUBSTRING ( expression, start, length )
인수
expression
문자, 이진, 텍스트, ntext 또는 이미지 식입니다.
start
반환된 문자가 시작되는 위치를 지정하는 정수 또는 bigint 식입니다. (번호 매기기는 식의 첫 번째 문자가 1을 의미하는 1 기준입니다). start가 1보다 작은 경우 반환되는 식은 expression에 지정된 첫째 문자에서 시작합니다. 이 경우 반환되는 문자 수는 start + length-1 또는 0 중에서 더 큰 값입니다. start가 값 식의 문자 수보다 큰 경우 길이가 0인 식이 반환됩니다.
length
반환될 expression의 문자 수를 지정하는 양의 정수 또는 bigint 식입니다. length가 음수이면 오류가 발생하면서 문이 종료됩니다. start와 length의 합계가 expression의 문자 수보다 크면 start에서 시작하는 전체 값 식이 반환됩니다.
반환 형식
expression이 지원되는 문자 데이터 형식 중 하나이면 문자 데이터를 반환합니다. expression이 지원되는 binary 데이터 형식 중 하나이면 이진 데이터를 반환합니다. 반환되는 문자열은 다음 표에 표시된 항목을 제외하고 지정된 식과 같은 형식입니다.
지정된 식 | 반환 형식 |
---|---|
char/varchar/text | varchar |
nchar/nvarchar/ntext | nvarchar |
binary/varbinary/image | varbinary |
설명
ntext, char 또는 varchar 데이터 형식의 문자 수와 text, image, binary 또는 varbinary 데이터 형식의 바이트에 대해 start 및 length 값을 지정해야 합니다.
start 또는 length에 2147483647보다 큰 값이 포함된 경우 expression은 varchar(max) 또는 varbinary(max) 여야 합니다.
보조 문자(서로게이트 쌍)
SC(보조 문자) 데이터 정렬을 사용하는 경우 start 및 length가 expression의 각 서로게이트 쌍을 단일 문자로 계산합니다. 자세한 내용은 Collation and Unicode Support을 참조하세요.
예제
A. 문자열과 SUBSTRING 사용
다음 예에서는 문자열의 일부를 반환하는 방법을 보여 줍니다. 이 쿼리는 sys.databases
테이블에서 첫 번째 열에 시스템 데이터베이스 이름, 두 번째 열에 데이터베이스의 첫 번째 문자, 마지막 열에 세 번째 및 네 번째 문자를 반환합니다.
SELECT name, SUBSTRING(name, 1, 1) AS Initial ,
SUBSTRING(name, 3, 2) AS ThirdAndFourthCharacters
FROM sys.databases
WHERE database_id < 5;
결과 집합은 다음과 같습니다.
name | Initial | ThirdAndFourthCharacters |
---|---|---|
master | m | st |
tempdb | t | mp |
model | m | de |
msdb | m | db |
다음 예에서는 문자열 상수 abcdef
의 둘째, 셋째, 넷째 문자를 표시하는 방법을 보여 줍니다.
SELECT x = SUBSTRING('abcdef', 2, 3);
결과 집합은 다음과 같습니다.
x
----------
bcd
(1 row(s) affected)
B. text, ntext, image 데이터와 SUBSTRING 사용
참고
다음 예를 실행하려면 pubs 데이터베이스를 설치해야 합니다.
다음 예에서는 pubs
데이터베이스의 pub_info
테이블에 있는 각각의 text 및 image 데이터 열에서 처음 10자를 반환하는 방법을 보여 줍니다. text 데이터는 varchar로 반환되며 image 데이터는 varbinary로 반환됩니다.
USE pubs;
SELECT pub_id, SUBSTRING(logo, 1, 10) AS logo,
SUBSTRING(pr_info, 1, 10) AS pr_info
FROM pub_info
WHERE pub_id = '1756';
결과 집합은 다음과 같습니다.
pub_id logo pr_info
------ ---------------------- ----------
1756 0x474946383961E3002500 This is sa
(1 row(s) affected)
다음 예에서는 text 및 ntext 데이터에 SUBSTRING을 사용한 결과를 보여 줍니다. 이 예제는 먼저 pubs
데이터베이스에서 npub_info
라는 새 테이블을 만듭니다. 다음 pr_info
열의 처음 80자로 npub_info
테이블의 pub_info.pr_info
열을 만들고 ü
를 첫 번째 문자로 추가합니다. 마지막으로 INNER JOIN
을 사용해 모든 게시자 ID와 text 및 ntext 게시자 정보 열의 SUBSTRING
을 검색합니다.
IF EXISTS (SELECT table_name FROM INFORMATION_SCHEMA.TABLES
WHERE table_name = 'npub_info')
DROP TABLE npub_info;
GO
-- Create npub_info table in pubs database. Borrowed from instpubs.sql.
USE pubs;
GO
CREATE TABLE npub_info
(
pub_id CHAR(4) NOT NULL
REFERENCES publishers(pub_id)
CONSTRAINT UPKCL_npubinfo PRIMARY KEY CLUSTERED,
pr_info ntext NULL
);
GO
-- Fill the pr_info column in npub_info with international data.
RAISERROR('Now at the inserts to pub_info...',0,1);
GO
INSERT npub_info VALUES('0736', N'üThis is sample text data for New Moon Books, publisher 0736 in the pubs database')
,('0877', N'üThis is sample text data for Binnet & Hardley, publisher 0877 in the pubs databa')
,('1389', N'üThis is sample text data for Algodata Infosystems, publisher 1389 in the pubs da')
,('9952', N'üThis is sample text data for Scootney Books, publisher 9952 in the pubs database')
,('1622', N'üThis is sample text data for Five Lakes Publishing, publisher 1622 in the pubs d')
,('1756', N'üThis is sample text data for Ramona Publishers, publisher 1756 in the pubs datab')
,('9901', N'üThis is sample text data for GGG&G, publisher 9901 in the pubs database. GGG&G i')
,('9999', N'üThis is sample text data for Lucerne Publishing, publisher 9999 in the pubs data');
GO
-- Join between npub_info and pub_info on pub_id.
SELECT pr.pub_id, SUBSTRING(pr.pr_info, 1, 35) AS pr_info,
SUBSTRING(npr.pr_info, 1, 35) AS npr_info
FROM pub_info pr INNER JOIN npub_info npr
ON pr.pub_id = npr.pub_id
ORDER BY pr.pub_id ASC;
예: Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)
C. 문자열과 SUBSTRING 사용
다음 예에서는 문자열의 일부를 반환하는 방법을 보여 줍니다. 이 쿼리는 dbo.DimEmployee
테이블에서 첫 번째 열에 이름을 반환하고 두 번째 열에 머리글자를 반환합니다.
-- Uses AdventureWorks
SELECT LastName, SUBSTRING(FirstName, 1, 1) AS Initial
FROM dbo.DimEmployee
WHERE LastName LIKE 'Bar%'
ORDER BY LastName;
결과 집합은 다음과 같습니다.
LastName Initial
-------------------- -------
Barbariol A
Barber D
Barreto de Mattos P
다음 예는 문자열 상수 abcdef
의 두 번째, 세 번째, 네 번째 문자를 반환하는 방법을 보여줍니다.
USE ssawPDW;
SELECT TOP 1 SUBSTRING('abcdef', 2, 3) AS x FROM dbo.DimCustomer;
결과 집합은 다음과 같습니다.
x
-----
bcd
참고 항목
LEFT(Transact-SQL)
LTRIM(Transact-SQL)
RIGHT(Transact-SQL)
RTRIM(Transact-SQL)
STRING_SPLIT(Transact-SQL)
TRIM(Transact-SQL)
문자열 함수(Transact-SQL)