다음을 통해 공유


SUBSTRING(Transact-SQL)

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

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

구문

SUBSTRING ( value_expression ,start_expression , length_expression )

인수

  • value_expression
    character, binary, text, ntext 또는 image입니다.

  • start_expression
    반환된 문자가 시작되는 위치를 지정하는 정수 또는 bigint 식입니다. start_expression이 1보다 작은 경우 반환되는 식은 value_expression에 지정된 첫째 문자에서 시작합니다. 이 경우 반환되는 문자 수는 start_expression과 length_expression의 합계 또는 0 중에서 더 큰 값입니다. start_expression이 값 식의 문자 수보다 크면 길이가 0인 식이 반환됩니다.

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

반환 형식

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

지정된 식

반환 형식

char/varchar/text

varchar

nchar/nvarchar/ntext

nvarchar

binary/varbinary/image

varbinary

주의

start_expression과 length_expression에 대한 값은 ntext, char 또는 varchar 데이터 형식의 경우 문자 수로 지정해야 하며 text, image, binary 또는 varbinary 데이터 형식의 경우 바이트로 지정해야 합니다.

start_expression 또는 length_expression에 2147483647보다 큰 값이 있는 경우 value_expression은 varchar(max) 또는 varbinary(max)여야 합니다.

[!참고]

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

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개 행 적용됨)

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

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

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

x

----------

bcd

(1개 행 적용됨)

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

[!참고]

다음 예를 실행하려면 pubs 데이터베이스를 설치해야 합니다. pubs 데이터베이스의 설치 방법은 Northwind 및 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개 행 적용됨)

다음 예에서는 text 및 ntext 데이터에 대한 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;

참고 항목

참조