다음을 통해 공유


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에서 문자, 이진, 텍스트 또는 이미지 식의 일부를 반환합니다.

Transact-SQL 구문 표기 규칙

구문

SUBSTRING ( expression, start, length )  

인수

expression
문자, 이진, 텍스트, ntext 또는 이미지 입니다.

start
반환된 문자가 시작되는 위치를 지정하는 정수 또는 bigint 식입니다. (번호 매기기는 식의 첫 번째 문자가 1을 의미하는 1 기준입니다). start가 1보다 작은 경우 반환되는 식은 expression에 지정된 첫째 문자에서 시작합니다. 이 경우 반환되는 문자 수는 start + length-1 또는 0 중에서 더 큰 값입니다. start가 값 식의 문자 수보다 큰 경우 길이가 0인 식이 반환됩니다.

length
반환될 expression의 문자 수를 지정하는 양의 정수 또는 bigint 식입니다. length가 음수이면 오류가 발생하면서 문이 종료됩니다. startlength의 합계가 expression의 문자 수보다 크면 start에서 시작하는 전체 값 식이 반환됩니다.

반환 형식

expression이 지원되는 문자 데이터 형식 중 하나이면 문자 데이터를 반환합니다. expression이 지원되는 binary 데이터 형식 중 하나이면 이진 데이터를 반환합니다. 반환되는 문자열은 다음 표에 표시된 항목을 제외하고 지정된 식과 같은 형식입니다.

지정된 식 반환 형식
char/varchar/text varchar
nchar/nvarchar/ntext nvarchar
binary/varbinary/image varbinary

설명

ntext, char 또는 varchar 데이터 형식의 문자 수와 text, image, binary 또는 varbinary 데이터 형식의 바이트에 대해 startlength 값을 지정해야 합니다.

start 또는 length에 2147483647보다 큰 값이 포함된 경우 expressionvarchar(max) 또는 varbinary(max) 여야 합니다.

보조 문자(서로게이트 쌍)

SC(보조 문자) 데이터 정렬을 사용하는 경우 startlengthexpression의 각 서로게이트 쌍을 단일 문자로 계산합니다. 자세한 내용은 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 테이블에 있는 각각의 textimage 데이터 열에서 처음 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)

다음 예에서는 textntext 데이터에 SUBSTRING을 사용한 결과를 보여 줍니다. 이 예제는 먼저 pubs 데이터베이스에서 npub_info라는 새 테이블을 만듭니다. 다음 pr_info 열의 처음 80자로 npub_info 테이블의 pub_info.pr_info 열을 만들고 ü를 첫 번째 문자로 추가합니다. 마지막으로 INNER JOIN을 사용해 모든 게시자 ID와 textntext 게시자 정보 열의 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)