SUBSTRING (Transact-SQL)

傳回字元、二進位、文字或影像運算式的一部份。如需有關這個函數所能使用之有效 SQL Server 2005 資料類型的詳細資訊,請參閱<資料類型 (Transact-SQL)>。

主題連結圖示Transact-SQL 語法慣例

語法

SUBSTRING ( expression ,start , length )

引數

expression

這是包括資料行的字元字串、二進位字串、文字、影像、資料行或運算式。請勿使用包括彙總函數的運算式。

start

這是指定子字串起始位置的整數。start 的類型可以是 bigint

length

這是一個正整數,指定將傳回的 expression 字元或位元組數目。如果 length 是負數,則會傳回錯誤。length 的類型可以是 bigint

ms187748.note(zh-tw,SQL.90).gif附註:
由於 startlength 會指定位元組數目,當在 text 資料類型上,搭配 DBCS 定序 (如漢字) 來使用 SUBSTRING 時,可能會在結果的開頭或結尾分割字元。這個行為與 READTEXT 處理 DBCS 的方式一致。因此,我們建議您利用 ntext 來取代 DBCS 字元的 text。我們建議的另一個替代方式是使用 varchar(max) 資料類型,因為它不會分割 DBCS 定序的字元。

傳回類型

如果 expression 是支援的字元資料類型之一,就會傳回字元資料。如果 expression 是支援的二進位資料類型之一,就會傳回二進位資料。

傳回的字串與指定運算式的類型相同,但下表所顯示者例外。

指定的運算式 傳回類型

char/varchar/text

varchar

nchar/nvarchar/ntext

nvarchar

binary/varbinary/image

varbinary

備註

使用 ntextcharvarchar 資料類型的位移 (startlength),必須用字元數目來指定。使用 textimagebinaryvarbinary 資料類型的位移,必須用位元組數目來指定。

ms187748.note(zh-tw,SQL.90).gif附註:
相容性層級可能會影響傳回值。如需有關相容性層級的詳細資訊,請參閱<sp_dbcmptlevel (Transact-SQL)>。

範例

A. 搭配字元字串使用 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)

B. 搭配 text、ntext 和 image 資料使用 SUBSTRING

ms187748.note(zh-tw,SQL.90).gif附註:
若要執行下列範例,您必須安裝 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 效果。首先,這個範例會在名稱為 npub_infopubs 資料庫中,建立一份新的資料表。其次,這個範例會從 pub_info.pr_info 資料行的前 80 個字元中,建立 npub_info 資料表的 pr_info 資料行,再加入 ü 來作為第一個字元。最後,INNER JOIN 會擷取所有發行者識別碼,以及 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 協助