다음을 통해 공유


SUBSTRING(Transact-SQL)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)Microsoft Fabric의 SQL 분석 엔드포인트Microsoft Fabric의 웨어하우스

SQL Server에서 문자, 이진, 텍스트 또는 이미지 식의 일부를 반환합니다.

Transact-SQL 구문 표기 규칙

구문

SQL Server에 대한 구문입니다.

SUBSTRING ( expression , start , length )

Microsoft Fabric의 Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, 분석 플랫폼 시스템(PDW) 및 웨어하우스 및 SQL 분석 엔드포인트에 대한 구문입니다.

SUBSTRING ( expression , start [ , length ] )

인수

expression

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

start

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

length

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

Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, PDW(Analytics Platform System), Microsoft Fabric의 Warehouse 및 SQL 분석 엔드포인트에서 선택적 길이 인수와 함께 부분 문자열을 사용할 수 있습니다. 그러나 길이에 사용 NULL 하는 경우 반환 합니다 SUBSTRINGNULL. 검토 E. 예를 들어 선택적 길이 인수와 함께 SUBSTRING을 사용합니다.

반환 형식

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

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

설명

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

시작 또는 길이에 2,147,483,647보다 큰 값이 포함된 경우 식은varchar(max) 또는 varbinary(max)여야 합니다.

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

SC(보조 문자) 데이터 정렬을 사용하는 경우 시작길이 모두 의 각 서로게이트 쌍을 단일 문자로 계산합니다. 자세한 내용은 데이터 정렬 및 유니코드 지원을 참조하십시오.

예제

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 SUBSTRING('abcdef', 2, 3) AS x;

결과 집합은 다음과 같습니다.

x
----------
bcd

B. 텍스트, ntext 및 이미지 데이터와 함께 SUBSTRING 사용

참고

다음 예제를 실행하려면 pubs 데이터베이스를 설치해야 합니다.

다음 예에서는 데이터베이스의 테이블에 있는 각각의 pub_infopubs 데이터 열에서 처음 10자를 반환하는 방법을 보여 줍니다. text 데이터는 varchar로 반환되며 image 데이터는 varbinary로 반환됩니다.

USE pubs;
GO

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

다음 예제에서는 텍스트ntext 데이터 둘 다에 SUBSTRING 미치는 영향을 보여 있습니다. 이 예제는 먼저 pubs 데이터베이스에서 npub_info라는 새 테이블을 만듭니다. 다음 pr_info 열의 처음 80자로 npub_info 테이블의 pub_info.pr_info 열을 만들고 ü를 첫 번째 문자로 추가합니다. 마지막으로 INNER JOIN을 사용해 모든 게시자 ID와 SUBSTRINGntext 게시자 정보 열의 을 검색합니다.

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 FOREIGN KEY
        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 AS pr
     INNER JOIN npub_info AS 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

D. 길이 인수와 함께 NULL SUBSTRING 사용

SELECT SUBSTRING('123abc', 4, NULL) AS [NULL length];

결과 집합은 다음과 같습니다.

NULL length
-----------
NULL

E. 선택적 길이 인수와 함께 SUBSTRING 사용

적용 대상: Microsoft Fabric의 Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, 분석 플랫폼 시스템(PDW) 및 웨어하우스 및 SQL 분석 엔드포인트

다음 예제에서는 지정된 시작 위치에서 문자 문자열의 일부만 반환하는 방법을 보여 주었습니다. 길이 인수가 제공되지 않으므로 길이는 기본적으로 문자열의 나머지 문자를 반환합니다.

SELECT SUBSTRING('123abc', 4) AS y;

결과 집합은 다음과 같습니다.

y
-----
abc

F. 길이 인수 없이 SUBSTRING을 사용하여 AdventureWorks2022 인벤토리에서 교체 부품 찾기

USE AdventureWorks2022;
GO

SELECT [ProductDescriptionID],
       [Description],
       SUBSTRING([Description], LEN('Replacement') + 1) AS [Replacement-Part]
FROM [Production].[ProductDescription]
WHERE [Description] LIKE 'Replacement%';

결과 집합은 다음과 같습니다.

ProductDescriptionID 설명 Replacement-Part
686 엔트리 레벨 라이더를 위한 대체 산악 휠. 엔트리 레벨 라이더를 위한 산악 휠.
687 캐주얼한 라이더를 위한 대체 산악 휠. 심각한 라이더에 캐주얼에 대한 산 바퀴.
689 엔트리 레벨 사이클리스트를 위한 교체 도로 앞바퀴. 엔트리 레벨 사이클리스트를 위한 도로 앞바퀴.
867 엔트리 레벨 라이더를 위한 후방 산악 휠 교체. 엔트리 레벨 라이더를 위한 리어 마운틴 휠.
868 캐주얼한 라이더를 위한 후방 산악 휠을 교체합니다. 심각한 라이더에 캐주얼에 대한 리어 마운틴 휠.
870 엔트리 레벨 사이클리스트를 위한 교체 후륜. 엔트리 레벨 자전거의 뒷바퀴.
1981 엔트리 레벨 라이더를 위한 대체 산악 휠. 엔트리 레벨 라이더를 위한 산악 휠.
1987 캐주얼한 라이더를 위한 대체 산악 휠. 심각한 라이더에 캐주얼에 대한 산 바퀴.
1999 엔트리 레벨 사이클리스트를 위한 교체 도로 뒷바퀴. 엔트리 레벨 사이클리스트를 위한 도로 뒷바퀴.