다음을 통해 공유


SUBSTRING(Transact-SQL)

문자, 이진, 텍스트 또는 이미지 식의 일부를 반환합니다. 이 함수에 사용할 수 있는 유효한 SQL Server 2005 데이터 형식에 대한 자세한 내용은 데이터 형식(Transact-SQL)을 참조하십시오.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

SUBSTRING ( expression ,start , length )

인수

expression

문자열, 이진 문자열, 텍스트, 이미지, 열 또는 열을 포함하는 입니다. 집계 함수를 포함하는 식은 사용하지 마십시오.

start

부분 문자열이 시작하는 위치를 지정하는 정수입니다. startbigint 형식일 수 있습니다.

length

반환될 의 문자 또는 바이트 수를 지정하는 양의 정수입니다. length음수이면 오류가 반환됩니다. length는****bigint 형식일 수 있습니다.

[!참고] startlength는 바이트 수를 지정하므로 한글과 같이 DBCS 데이터 정렬을 사용하는 text 데이터 형식에 SUBSTRING을 사용하는 경우 결과의 시작 또는 끝에서 문자가 잘릴 수 있습니다. 이 동작은 READTEXT가 DBCS를 처리하는 방법과 동일합니다. 따라서 DBCS 문자에는 text 대신 ntext를 사용하는 것이 좋습니다. 다른 대안으로 DBCS 데이터 정렬을 위해 문자를 분리하지 않는 varchar(max) 데이터 형식을 사용할 수 있습니다.

주의

ntext, char 또는 varchar 데이터 형식을 사용하는 오프셋(startlength)은 문자 수로 지정해야 합니다. text, image, binary 또는 varbinary 데이터 형식을 사용하는 오프셋은 바이트 수로 지정해야 합니다.

[!참고] 반환되는 값은 호환성 수준에 따라 달라질 수 있습니다. 호환성 수준에 대한 자세한 내용은 sp_dbcmptlevel(Transact-SQL)을 참조하십시오.

반환 형식

expression이 지원되는 문자 데이터 형식 중 하나이면 문자 데이터를 반환합니다. expression이 지원되는 이진 데이터 형식 중 하나이면 이진 데이터를 반환합니다.

반환되는 문자열은 다음 표에 표시된 항목을 제외하고 지정된 식과 같은 형식입니다.

지정된 식 반환 형식

char/varchar/text

varchar

nchar/nvarchar/ntext

nvarchar

binary/varbinary/image

varbinary

1. 문자열과 SUBSTRING 사용

다음 예에서는 문자열의 일부를 반환하는 방법을 보여 줍니다. 이 쿼리는 Contact 테이블에서 첫 번째 열에 이름을 반환하고 두 번째 열에 머리글자를 반환합니다.

USE AdventureWorks;
GO
SELECT LastName, SUBSTRING(FirstName, 1, 1) AS Initial
FROM Person.Contact
WHERE LastName like 'Barl%'
ORDER BY LastName

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

LastName   Initial
---------------------------------        -------
Barley     R
Barlow     B

(2 row(s) affected)

다음 예에서는 문자열 상수 abcdef의 둘째, 세째, 네째 문자를 표시하는 방법을 보여줍니다.

SELECT x = SUBSTRING('abcdef', 2, 3)

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

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

(1 row(s) affected)

2. text, ntext, image 데이터와 SUBSTRING 사용

[!참고] 다음 예를 실행하려면 pubs 데이터베이스를 설치해야 합니다. pubs 데이터베이스의 설치 방법은 Northwind 및 pubs 예제 데이터베이스 다운로드를 참조하십시오.

다음 예에서는 pubs 데이터베이스의 pub_info 테이블에 있는 textimage 데이터 열의 각 항목에서 처음 200자를 반환하는 방법을 보여 줍니다. 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라는 새 테이블을 만듭니다. 다음 pub_info.pr_info 열의 처음 80자로 npub_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')
INSERT npub_info values('0877', N'üThis is sample text data for Binnet & Hardley, publisher 0877 in the pubs databa')
INSERT npub_info values('1389', N'üThis is sample text data for Algodata Infosystems, publisher 1389 in the pubs da')
INSERT npub_info values('9952', N'üThis is sample text data for Scootney Books, publisher 9952 in the pubs database')
INSERT npub_info values('1622', N'üThis is sample text data for Five Lakes Publishing, publisher 1622 in the pubs d')
INSERT npub_info values('1756', N'üThis is sample text data for Ramona Publishers, publisher 1756 in the pubs datab')
INSERT npub_info values('9901', N'üThis is sample text data for GGG&G, publisher 9901 in the pubs database. GGG&G i')
INSERT npub_info values('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

참고 항목

참조

문자열 함수(Transact-SQL)

도움말 및 정보

SQL Server 2005 지원 받기