次の方法で共有


部分文字列 (Transact-SQL)

Applies to:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス

SQL Server で、文字、バイナリ、テキスト、またはイメージ型の式の一部を返します。

Transact-SQL 構文表記規則

構文

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 が値式の文字数を上回る場合は、長さがゼロの式が返されます。

長さ

返される式の文字数を指定する正の整数または bigintlength が負の場合はエラーが生成され、ステートメントは終了します。 startlength の合計が expression の文字数を上回る場合は、start の先頭から値式全体が返されます。 length を省略すると、開始位置から式の末尾までのすべての文字が返されます。

部分文字列は、Microsoft Fabric の Azure SQL Database、Azure SQL Managed Instance、Azure Synapse Analytics、Analytics Platform System (PDW)、Warehouse および SQL Analytics エンドポイントで省略可能な 長さの 引数と共に使用できます。 ただし、NULLを使用すると、SUBSTRINGNULLを返します。 E. 例については、省略可能な長さの引数を指定して SUBSTRING を使用します。

戻り値の型

expression が、サポートされている文字データ型の 1 つである場合は、文字データが返されます。 expression が、サポートされている binary データ型の 1 つである場合は、binary データが返されます。 返される文字列のデータ型は、指定した式のデータ型と同じです。ただし、次の表の場合は例外です。

指定した式 の戻り値の型 :
char / varchar です / テキスト varchar
nchar です / nvarchar です / nテキスト nvarchar
バイナリ / varbinary / 画像 varbinary さん

解説

値は、 開始長さ の文字数で指定する必要があります ntextchar、または varchar データ型とのバイト textimagebinary、または 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 エントリーレベルサイクリスト用の交換用ロードリアホイール。 エントリーレベルのサイクリストのための道の後輪。