SUBSTRING (Transact-SQL)SUBSTRING (Transact-SQL)

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

SQL ServerSQL Server で、文字、バイナリ、テキスト、またはイメージ型の式の一部を返します。Returns part of a character, binary, text, or image expression in SQL ServerSQL Server.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

SUBSTRING ( expression ,start , length )  

引数Arguments

式 (expression)expression
characterbinarytextntext、または image です。Is a character, binary, text, ntext, or image expression.

startstart
返された文字の開始位置を示す integer 式または bigint 式です。Is an integer or bigint expression that specifies where the returned characters start. (番号は 1 から開始し、これは式の最初の文字が 1 であることを意味します)。(The numbering is 1 based, meaning that the first character in the expression is 1). start に 1 より小さい値を指定した場合は、expression に指定された文字の先頭から値が返されます。If start is less than 1, the returned expression will begin at the first character that is specified in expression. この場合、返される文字数は、start + length-1 の合計値か、0 のどちらか大きい方になります。In this case, the number of characters that are returned is the largest value of either the sum of start + length- 1 or 0. start が値式の文字数を上回る場合は、長さがゼロの式が返されます。If start is greater than the number of characters in the value expression, a zero-length expression is returned.

lengthlength
expression で返す文字数を正の整数または bigint 式で指定します。Is a positive integer or bigint expression that specifies how many characters of the expression will be returned. length が負の場合はエラーが生成され、ステートメントは終了します。If length is negative, an error is generated and the statement is terminated. startlength の合計が expression の文字数を上回る場合は、start の先頭から値式全体が返されます。If the sum of start and length is greater than the number of characters in expression, the whole value expression beginning at start is returned.

戻り値の型Return Types

expression が、サポートされている文字データ型の 1 つである場合は、文字データが返されます。Returns character data if expression is one of the supported character data types. expression が、サポートされている binary データ型の 1 つである場合は、binary データが返されます。Returns binary data if expression is one of the supported binary data types. 返される文字列のデータ型は、指定した式のデータ型と同じです。ただし、次の表の場合は例外です。The returned string is the same type as the specified expression with the exceptions shown in the table.

指定した式Specified expression の戻り値の型 :Return type
char/varchar/textchar/varchar/text varcharvarchar
nchar/nvarchar/ntextnchar/nvarchar/ntext nvarcharnvarchar
binary/varbinary/imagebinary/varbinary/image varbinaryvarbinary

RemarksRemarks

値は、 開始長さ の文字数で指定する必要があります ntext, 、char, 、または varchar データ型とのバイト テキスト, 、イメージ, 、バイナリ, 、または varbinary データ型。The values for start and length must be specified in number of characters for ntext, char, or varchar data types and bytes for text, image, binary, or varbinary data types.

する必要があります varchar (max) または varbinary (max) ときに、 開始 または 長さ 2,147, 483,647 を超える値が含まれています。The expression must be varchar(max) or varbinary(max) when the start or length contains a value larger than 2147483647.

補助文字 (サロゲート ペア)Supplementary Characters (Surrogate Pairs)

補助文字 (SC) の照合順序を使用する場合、startlength では、expression の各サロゲート ペアが 1 文字としてカウントされます。When using supplementary character (SC) collations, both start and length count each surrogate pair in expression as a single character. 詳細については、「 Collation and Unicode Support」を参照してください。For more information, see Collation and Unicode Support.

使用例Examples

A.A. SUBSTRING に文字列を使用するUsing SUBSTRING with a character string

次の例では、文字列の一部分のみを返す方法を示しています。The following example shows how to return only a part of a character string. sys.databases テーブルから、このクエリは最初の列でシステム データベース名、2 番目の列でデータベースの最初の文字、最後の列で 3 番目と 4 番目の文字を返します。From the sys.databases table, this query returns the system database names in the first column, the first letter of the database in the second column, and the third and fourth characters in the final column.

SELECT name, SUBSTRING(name, 1, 1) AS Initial ,
SUBSTRING(name, 3, 2) AS ThirdAndFourthCharacters
FROM sys.databases  
WHERE database_id < 5;   

以下に結果セットを示します。Here is the result set.

NAMEname InitialInitial ThirdAndFourthCharactersThirdAndFourthCharacters
mastermaster mm stst
tempdbtempdb tt mpmp
modelmodel mm dede
msdbmsdb mm dbdb

文字列定数 abcdef の 2 番目、3 番目、および 4 番目の文字を表示するには、次のようにします。Here is how to display the second, third, and fourth characters of the string constant abcdef.

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

以下に結果セットを示します。Here is the result set.

x  
----------  
bcd  
 
(1 row(s) affected)

B.B. SUBSTRING に text、ntext、および image 型のデータを使用するUsing SUBSTRING with text, ntext, and image data

注意

次の例を実行するには、pubs データベースをインストールする必要があります。To run the following examples, you must install the pubs database.

次の例では、pubs データベースにある pub_info テーブルの text および image データ列から、それぞれ最初の 10 文字を返す方法を示します。The following example shows how to return the first 10 characters from each of a text and image data column in the pub_info table of the pubs database. テキスト としてデータが返される varchar, 、および イメージ としてデータが返されます varbinaryです。text data is returned as varchar, and image data is returned as 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';  

以下に結果セットを示します。Here is the result set.

pub_id logo    pr_info
------ ---------------------- ----------
1756   0x474946383961E3002500 This is sa

(1 row(s) affected)

次の例では、text データと ntext データの両方に対する SUBSTRING の効果を示します。The following example shows the effect of SUBSTRING on both text and ntext data. この例では最初に、npub_info という名前の pubs データベースに新しいテーブルを作成します。First, this example creates a new table in the pubs database named npub_info. 次に、pr_info 列の最初の 80 文字から npub_info テーブルの pub_info.pr_info 列を作成し、最初の文字として ü を追加します。Second, the example creates the pr_info column in the npub_info table from the first 80 characters of the pub_info.pr_info column and adds an ü as the first character. 最後に、INNER JOIN を使って、text および ntext の両方のパブリッシャー情報列から、すべてのパブリッシャー ID 番号と SUBSTRING を取得します。Lastly, an INNER JOIN retrieves all publisher identification numbers and the SUBSTRING of both the text and ntext publisher information columns.

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 SQL データ ウェアハウスAzure SQL Data Warehouse および Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL データ ウェアハウスAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

C.C. SUBSTRING に文字列を使用するUsing SUBSTRING with a character string

次の例では、文字列の一部分のみを返す方法を示しています。The following example shows how to return only a part of a character string. このクエリでは、dbo.DimEmployee テーブルから、最初の列に姓を、2 番目の列には名のイニシャルのみを返します。From the dbo.DimEmployee table, this query returns the last name in one column with only the first initial in the second column.

-- Uses AdventureWorks  
  
SELECT LastName, SUBSTRING(FirstName, 1, 1) AS Initial  
FROM dbo.DimEmployee  
WHERE LastName LIKE 'Bar%'  
ORDER BY LastName;  

以下に結果セットを示します。Here is the result set.

LastName             Initial
-------------------- -------
Barbariol            A
Barber               D
Barreto de Mattos    P

次の例では、文字列定数 abcdef の 2 番目、3 番目、4 番目の文字を返す方法を示します。The following example shows how to return the second, third, and fourth characters of the string constant abcdef.

USE ssawPDW;  
  
SELECT TOP 1 SUBSTRING('abcdef', 2, 3) AS x FROM dbo.DimCustomer;  

以下に結果セットを示します。Here is the result set.

x
-----
bcd

参照See Also

LEFT (Transact-SQL)LEFT (Transact-SQL)
LTRIM (Transact-SQL)LTRIM (Transact-SQL)
RIGHT (Transact-SQL)RIGHT (Transact-SQL)
RTRIM (Transact-SQL)RTRIM (Transact-SQL)
STRING_SPLIT (Transact-SQL)STRING_SPLIT (Transact-SQL)
TRIM (Transact-SQL)TRIM (Transact-SQL)
文字列関数 (Transact-SQL)String Functions (Transact-SQL)