请单击以进行评分并提供反馈
MSDN
MSDN Library
SQL Server
SQL Server 2008
数据库引擎
技术参考
 SUBSTRING (Transact-SQL)

  开启低带宽视图
社区内容
本节内容
统计 批注 (0)
同时提供下列产品的其他版本:
SQL Server 2008 联机丛书(2009 年 5 月)
SUBSTRING (Transact-SQL)

返回字符表达式、二进制表达式、文本表达式或图像表达式的一部分。有关可与此函数一起使用的有效 SQL Server 数据类型的详细信息,请参阅数据类型 (Transact-SQL)

主题链接图标 Transact-SQL 语法约定

SUBSTRING ( value_expression ,start_expression , length_expression )
value_expression

characterbinarytextntextimage 表达式

start_expression

指定返回字符的起始位置的整数或 bigint 表达式。如果 start_expression 小于 1,返回的表达式的起始位置为 value_expression 中指定的第一个字符。在这种情况下,返回的字符数是 start_expressionlength_expression 的和与 0 之的大值。如果 start_expression 大于值表达式中的字符数,将返回一个零长度的表达式。

length_expression

是正整数或指定要返回的 value_expression 的字符数的 bigint 表达式。如果 length_expression 是负数,会生成错误并终止语句。如果 start_expressionlength_expression 的和大于 value_expression 中的字符数,则返回起始位置为 start_expression 的整个值表达式。

如果 expression 是其中一个受支持的字符数据类型,则返回字符数据。如果 expression 是支持的 binary 数据类型中的一种数据类型,则返回二进制数据。返回的字符串类型与指定表达式的类型相同(表中显示的除外)。

指定的表达式 返回类型

char/varchar/text

varchar

nchar/nvarchar/ntext

nvarchar

binary/varbinary/image

varbinary

对于 ntextcharvarchar 数据类型,必须以字符数指定 start_expressionlength_expression 的值;对于 textimagebinaryvarbinary 数据类型,则必须以字节数指定。

start_expressionlength_expression 包含大于 2147483647 的值时,value_expression 的数据类型必须为 varchar(max)varbinary(max)

ms187748.note(zh-cn,SQL.100).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-cn,SQL.100).gif注意:
若要运行以下示例,必须安装 pubs 数据库。有关如何安装 pubs 数据库的信息,请参阅下载 Northwind 和 pubs 示例数据库

以下示例说明如何返回 pubs 数据库的 pub_info 表内每个 textimage 数据列的前 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 row(s) affected)

以下示例说明 SUBSTRING 对 textntext 数据的影响。首先,该示例在 pubs 数据库内创建一个名为 npub_info 的新表。接着,该示例使用 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;
社区内容   什么是社区内容?
添加新内容 RSS  批注
Processing
© 2009 Microsoft Corporation 版权所有。 保留所有权利  |  商标  |  隐私权声明
Page view tracker