적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System(PDW)
Microsoft Fabric의 SQL 분석 엔드포인트
Microsoft Fabric의 웨어하우스
SQL Server에서 문자, 이진, 텍스트 또는 이미지 식의 일부를 반환합니다.
구문
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가 음수이면 오류가 발생하면서 문이 종료됩니다. start와 length의 합계가 expression의 문자 수보다 크면 start에서 시작하는 전체 값 식이 반환됩니다. 길이를 생략하면 시작 위치에서 식 끝까지의 모든 문자가 반환됩니다.
Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, PDW(Analytics Platform System), Microsoft Fabric의 Warehouse 및 SQL 분석 엔드포인트에서 선택적 길이 인수와 함께 부분 문자열을 사용할 수 있습니다. 그러나 길이에 사용 NULL
하는 경우 반환 합니다 SUBSTRING
NULL
.
검토 E. 예를 들어 선택적 길이 인수와 함께 SUBSTRING을 사용합니다.
반환 형식
expression이 지원되는 문자 데이터 형식 중 하나이면 문자 데이터를 반환합니다. expression이 지원되는 binary 데이터 형식 중 하나이면 이진 데이터를 반환합니다. 반환되는 문자열은 다음 표에 표시된 항목을 제외하고 지정된 식과 같은 형식입니다.
지정된 식 | 반환 형식 |
---|---|
char / varchar / text | varchar |
nchar / nvarchar / ntext | nvarchar |
binary / varbinary / image | varbinary |
설명
ntext, char 또는 varchar 데이터 형식의 문자 수와 text, image, binary 또는 varbinary 데이터 형식의 바이트에 대해 start 및 length 값을 지정해야 합니다.
시작 또는 길이에 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_info
및 pubs
데이터 열에서 처음 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와 SUBSTRING
및 ntext 게시자 정보 열의 을 검색합니다.
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 | 엔트리 레벨 사이클리스트를 위한 교체 도로 뒷바퀴. | 엔트리 레벨 사이클리스트를 위한 도로 뒷바퀴. |