第六章 字符串函数
字符串函数用于对字符和二进制字符串进行各种操作,它们返回对字符数据进行操作时通常所需要的值。大多数字符串函数只能用于 char、nchar、varchar 和 nvarchar 数据类型,或隐性转换为上述数据类型的数据类型。少数字符串函数也可用于 binary 和 varbinary 数据。Transact-SQL 提供如下字符串函数。
ASCII NCHAR SOUNDEX
CHAR PATINDEX SPACE
CHARINDEX REPLACE STR
DIFFERENCE QUOTENAME STUFF
LEFT REPLICATE SUBSTRING
LEN REVERSE UNICODE
LOWER RIGHT UPPER
LTRIM RTRIM
==============================
1 STR 函数
==============================
STR 由数字数据转换来的字符数据。
语法
STR ( float_expression [ , length [ , decimal ] ] )
参数
float_expression 是带小数点的近似数字 (float) 数据类型的表达式。
length 是转换后字符串总长度,包括小数点、符号、数字或空格。默认值为 10。若指定的总长度小于float_expression小数点前面的数字,返回 **。
decimal 是小数点右边的位数。
返回类型 char
示例1
下例将包含五个数字和一个小数点的表达式转换为有六个位置的字符串。数字的小数部分四舍五入为一个小数位。
SELECT STR(123.45, 6, 1)
GO
下面是结果集:
------
123.5
示例2
SELECT STR(123.45, 2, 2)
GO
下面是结果集:
--
**
示例3
即使数字数据嵌套在 STR内,结果集也是带指定格式的字符数据。
SELECT STR (FLOOR (123.45), 8, 3)
GO
下面是结果集:
--------
123.000
示例4
SELECT STR(3.147) AS 'STR',
STR(3.147, 5, 2) AS '2decimals',
STR(3.147, 5, 3) AS '3decimals'
GO
下面是结果集:
STR 2decimals 3decimals
---------- ---------- ----------
3 3.15 3.147
==============================
2 LEFT 函数
==============================
LEFT 返回从字符串左边开始指定个数的字符。
语法
LEFT ( character_expression , integer_expression )
参数
character_expression
字符或二进制数据表达式。character_expression 可以是常量、变量或列。character_expression 必须是可以隐式地转换为 varchar 的数据类型。否则,请使用 CAST 函数显式转换 character_expression。
integer_expression
是正整数。如果 integer_expression 为负,则返回空字符串。
返回类型 varchar
示例5
对列使用 LEFT 函数,下面的示例返回每个书名最左边的 5 个字符。
USE pubs
GO
SELECT LEFT(title, 5)
FROM titles
ORDER BY title_id
GO
下面是结果集:
-----
The B
Cooki
You C
.
.
.
Sushi
示例2
对字符串使用 LEFT 函数,下面的示例使用 LEFT 函数返回字符串 abcdefg 最左边的 2 个字符。
SELECT LEFT('abcdefg',2)
GO
下面是结果集:
--
ab
==============================
3 RIGHT
==============================
返回字符串中从右边开始指定个数的 integer_expression 字符。
语法
RIGHT ( character_expression , integer_expression )
参数
character_expression
由字符数据组成的表达式。character_expression 可以是常量、变量,也可以是字符或二进制数据的列。
integer_expression
是起始位置,用正整数表示。如果 integer_expression 是负数,则返回一个错误。
返回类型 varchar
示例6
下例返回每个作者名字中最右边的五个字符。
USE pubs
GO
SELECT RIGHT(au_fname, 5)
FROM authors
ORDER BY au_fname
GO
下面是结果集:
------------------
raham
Akiko
lbert
Ann
.
.
.
ylvia
==============================
4 CHAR函数
==============================
CHAR 将 int ASCII 代码转换为字符的字符串函数。
语法
CHAR ( integer_expression )
参数
integer_expression
介于 0 和 255 之间的整数。如果整数表达式不在此范围内,将返回 NULL 值。
返回类型 char(1)
注释
CHAR 可用于将控制字符插入字符串中。下表显示了一些常用的控制字符。
控制字符 值
制表符 CHAR(9)
换行符 CHAR(10)
回车 CHAR(13)
示例7
DECLARE @position char(8), @string char(8)
SET @position = 'my'
SET @string = 'SQL'
PRINT @position+char(10)+ @string
GO
下面是结果集:
------------------
my
SQL
==============================
5 SUBSTRING
==============================
SUBSTRING 返回字符、binary、text 或 image 表达式的一部分。
语法
SUBSTRING ( expression , start , length )
参数
expression
是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。
start
是一个整数,指定子串的开始位置。
length
是一个整数,指定子串的长度(要返回的字符数或字节数)。
返回类型
如果 expression 是支持的字符数据类型,则返回字符数据。如果 expression 是支持的 binary 数据类型,则返回二进制数据。
给定的表达式 返回类型
text varchar
image varbinary
ntext nvarchar
示例8
下例显示如何只返回字符串的一部分。该查询在一列中返回 authors 表中的姓氏,在另一列中返回 authors 表中的名字首字母。
USE pubs
SELECT au_lname, SUBSTRING(au_fname, 1, 1)
FROM authors
ORDER BY au_lname
下面是结果集:
au_lname
---------------------------------------- -
Bennet A
Blotchet-Halls R
Carson C
DeFrance M
del Castillo I
...
Yokomoto A