Applies to: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、Analytics Platform System (PDW)、Warehouse および SQL Analytics エンドポイントの構文。
SUBSTRING ( expression , start [ , length ] )
引数
式 (expression)
文字、バイナリ、テキスト、ntext、またはイメージ式。
を開始
返される文字の開始位置を指定する整数または bigint 式。 (番号は 1 から開始し、これは式の最初の文字が 1 であることを意味します)。 start が 1 未満の場合、返される式は式で指定された最初の文字から始まります。 この場合、返される文字数は、 start + length - 1、または 0 の合計の最大値になります。 start が値式の文字数を上回る場合は、長さがゼロの式が返されます。
長さ
返される式の文字数を指定する正の整数または bigint式 。 length が負の場合はエラーが生成され、ステートメントは終了します。 start と length の合計が expression の文字数を上回る場合は、start の先頭から値式全体が返されます。 length を省略すると、開始位置から式の末尾までのすべての文字が返されます。
部分文字列は、Microsoft Fabric の Azure SQL Database、Azure SQL Managed Instance、Azure Synapse Analytics、Analytics Platform System (PDW)、Warehouse および SQL Analytics エンドポイントで省略可能な 長さの 引数と共に使用できます。 ただし、NULL
を使用すると、SUBSTRING
はNULL
を返します。
E. 例については、省略可能な長さの引数を指定して SUBSTRING を使用します。
戻り値の型
expression が、サポートされている文字データ型の 1 つである場合は、文字データが返されます。 expression が、サポートされている binary データ型の 1 つである場合は、binary データが返されます。 返される文字列のデータ型は、指定した式のデータ型と同じです。ただし、次の表の場合は例外です。
指定した式 | の戻り値の型 : |
---|---|
char / varchar です / テキスト | varchar |
nchar です / nvarchar です / nテキスト | nvarchar |
バイナリ / varbinary / 画像 | varbinary さん |
解説
値は、 開始 と 長さ の文字数で指定する必要があります ntext、char、または varchar データ型とのバイト text、image、binary、または varbinary データ型。
開始または長さが 2,147,483,647 より大きい値を含む場合、式は varchar(max) または varbinary(max) である必要があります。
補助文字 (サロゲート ペア)
補助文字 (SC) 照合順序を使用する場合、 開始 と 長さの 両方で 、式 内の各サロゲート ペアが 1 文字としてカウントされます。 詳細については、「照合順序および Unicode のサポート」を参照してください。
例
A。 文字列で SUBSTRING を使用する
次の例では、文字列の一部分のみを返す方法を示しています。
sys.databases
テーブルから、このクエリは最初の列でシステム データベース名、2 番目の列でデータベースの最初の文字、最後の列で 3 番目と 4 番目の文字を返します。
SELECT name,
SUBSTRING(name, 1, 1) AS Initial,
SUBSTRING(name, 3, 2) AS ThirdAndFourthCharacters
FROM sys.databases
WHERE database_id < 5;
結果セットは次のとおりです。
名前 | イニシャル | 3番目と4番目のキャラクター |
---|---|---|
master |
m |
st |
tempdb |
t |
mp |
model |
m |
de |
msdb |
m |
db |
文字列定数 abcdef
の 2 番目、3 番目、および 4 番目の文字を表示するには、次のクエリを使用します。
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
次の例は、SUBSTRING
データと n テキスト データの両方に対するの影響を示しています。 この例では最初に、pubs
という名前の npub_info
データベースに新しいテーブルを作成します。 次に、pr_info
列の最初の 80 文字から npub_info
テーブルの pub_info.pr_info
列を作成し、最初の文字として ü
を追加します。 最後に、INNER JOIN
を使って、SUBSTRING
および ntext の両方のパブリッシャー情報列から、すべてのパブリッシャー ID 番号と を取得します。
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、Analytics Platform System (PDW)
C. 文字列で SUBSTRING を使用する
次の例では、文字列の一部分のみを返す方法を示しています。
dbo.DimEmployee
テーブルから、このクエリは 1 つの列にファミリ名を返し、2 番目の列の最初のイニシャルのみを返します。
-- 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
の 2 番目、3 番目、4 番目の文字を返す方法を示します。
USE ssawPDW;
SELECT TOP 1 SUBSTRING('abcdef', 2, 3) AS x
FROM dbo.DimCustomer;
結果セットは次のとおりです。
x
-----
bcd
D. 引数 length で SUBSTRING NULL
使用する
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、Analytics Platform System (PDW)、Warehouse および SQL Analytics エンドポイント
次の例は、指定された開始位置から文字列の一部のみを返す方法を示しています。 length 引数が指定されていないため、長さは既定で文字列内の残りの文字を返します。
SELECT SUBSTRING('123abc', 4) AS y;
結果セットは次のとおりです。
y
-----
abc
F. Length 引数を指定せずに SUBSTRING を使用して AdventureWorks2022 インベントリ内の置換パーツを検索する
USE AdventureWorks2022;
GO
SELECT [ProductDescriptionID],
[Description],
SUBSTRING([Description], LEN('Replacement') + 1) AS [Replacement-Part]
FROM [Production].[ProductDescription]
WHERE [Description] LIKE 'Replacement%';
結果セットは次のとおりです。
製品説明ID | 説明 | Replacement-Part |
---|---|---|
686 | エントリーレベルライダー用の交換用マウンテンホイール。 | エントリーレベルのライダーのための山の車輪。 |
687 | ●カジュアルからシリアスなライダーに代わる山車。 | カジュアルからシリアスなライダーのための山車。 |
689 | エントリーレベルのサイクリスト用交換用ロードフロントホイール。 | エントリーレベルのサイクリストのためのロードフロントホイール。 |
867 | エントリーレベルライダー用の交換用リアマウンテンホイール。 | エントリーレベルのライダーのための後部山車。 |
868 | ●カジュアルからシリアスなライダー向けの交換用リアマウンテンホイール。 | カジュアルからシリアスなライダーのためのリアマウンテンホイール。 |
870 | エントリーレベルのサイクリスト用交換後輪。 | エントリーレベルのサイクリストのための後輪。 |
1981 | エントリーレベルライダー用の交換用マウンテンホイール。 | エントリーレベルのライダーのための山の車輪。 |
1987 | ●カジュアルからシリアスなライダーに代わる山車。 | カジュアルからシリアスなライダーのための山車。 |
1999 | エントリーレベルサイクリスト用の交換用ロードリアホイール。 | エントリーレベルのサイクリストのための道の後輪。 |