1、substring(expression,start,length)

expression 是字符串、二进制字符串、文本、图形、列或保护列的表达式

start 指定字符串开始位置的整数

length 一个整数,指定要返回的express的字符串的字符数或字节数

 

如果 expression 是受支持的字符数据类型,则返回字符数据。如果 expression 是受支持的 binary 数据类型,则返回二进制数据。

返回的字符串类型与指定表达式的类型相同(表中显示的除外)。

指定的表达式返回类型

char/varchar/text

varchar

nchar/nvarchar/ntext

nvarchar

binary/varbinary/p_w_picpath

varbinary

declare @a varchar(100)
set @a='abcdefg'
print substring(@a,2,2)


select substring(FirstName,2,2),LastName from Employees

select x=substring('abcdef',2,3)

 

2、

返回字符串中从左边开始指定个数的字符。

Left(Character_expression,integer_expression)

返回字符串中从右边开始指定个数的字符。

RIGHT ( character_expression , integer_expression )
 

print left('abcdefgh',3)
print right('abcedefg',3)

select left(FirstName,3) from Employees

select right(FirstName,3) from Employees

3、去除字符串的左右空格

返回删除了前导空格之后的字符表达式。

ltrim(character_expression)

截断所有尾随空格后返回一个字符串。

RTRIM ( character_expression )
 

4、查询某个字符的开始位置

expression2 中搜索 expression1 并返回其起始位置(如果找到)。搜索的起始位置为 start_location

CHARINDEX ( expression1 ,expression2 [ , start_location ] )
 

expression1

包含要查找的序列的字符表达式expression1 最大长度限制为 8000 个字符。

expression2

要搜索的字符表达式。

start_location

表示搜索起始位置的整数或 bigint 表达式。如果未指定 start_location,或者 start_location 为负数或 0,则将从 expression2 的开头开始搜索。

返回类型

 

如果 expression2 的数据类型为 varchar(max)nvarchar(max)varbinary(max),则为 bigint,否则为 int

以下示例返回字符序列 bicycleDocument 表的 DocumentSummary 列中开始的位置。

 
DECLARE @document varchar(64)

SELECT @document = 'Reflectors are vital safety' +
                   ' components of your bicycle.'
SELECT CHARINDEX('bicycle', @document)
GO


 

以下示例将使用可选的 start_location 参数从 DocumentSummary 列的第五个字符开始查找 vital

 
DECLARE @document varchar(64)

SELECT @document = 'Reflectors are vital safety' +
                   ' components of your bicycle.'
SELECT CHARINDEX('vital', @document, 5)
GO


 

以下示例显示了在 expression2 内找不到 expression1 时的结果集。

 
DECLARE @document varchar(64)

SELECT @document = 'Reflectors are vital safety' +
                   ' components of your bicycle.'
SELECT CHARINDEX('bike', @document)
GO


 

下面的示例在 'Das jst ein Test' 中执行区分大小写的字符串 'TEST' 搜索。

 
USE tempdb;
GO
--perform a case sensitive search
SELECT CHARINDEX ( 'TEST',
       'Das ist ein Test'
       COLLATE Latin1_General_CS_AS)


 

下面的示例在 'Das jst ein Test' 中执行区分大小写的字符串 'Test' 搜索。 

USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
       'Das ist ein Test'
       COLLATE Latin1_General_CS_AS)


 

下面的示例在 'Das jst ein Test' 中执行不区分大小写的字符串 'TEST' 搜索。

 
USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
       'Das ist ein Test'
       COLLATE Latin1_General_CI_AS)
GO

5、

返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。

PATINDEX ( '%pattern%' , expression )
 

' pattern'

一个文字字符串。可以使用通配符,但 pattern 之前和之后必须有 % 字符(搜索第一个或最后一个字符时除外)。pattern 是字符串数据类型类别的表达式。

expression

一个表达式,通常为要在其中搜索指定模式的列,expression 为字符串数据类型类别。

如果 expression 的数据类型为 varchar(max)nvarchar(max),则为 bigint,否则为 int

use NorthWind

在FirstName中查找n字符的首个出现位置

select patindex('%n%',FirstName) from Employees where LastName='Davolio'

 

A. 在 PATINDEX 中使用模式

以下示例查找模式 ensureDocument 表的 DocumentSummary 列的某一特定行中的开始位置。

 
USE AdventureWorks2008R2;
GO
SELECT PATINDEX('%ensure%',DocumentSummary)
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO


 

B. 在 PATINDEX 中使用通配符

以下示例使用通配符查找模式 en_ureDocument 表中 DocumentSummary 列的某一特定行中的开始位置,其中下划线为代表任何字符的通配符。 

USE AdventureWorks2008R2;
GO
SELECT PATINDEX('%en_ure%', DocumentSummary)
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO

6、替换字符串

用另一个字符串值替换出现的所有指定字符串值。

REPLACE ( string_expression , string_pattern , string_replacement )
 

string_expression

要搜索的字符串表达式string_expression 可以是字符或二进制数据类型。

string_pattern

是要查找的子字符串。string_pattern 可以是字符或二进制数据类型。string_pattern 不能是空字符串 ('')。

string_replacement

替换字符串。string_replacement 可以是字符或二进制数据类型。

以下示例使用 xxx 替换 abcdefghi 中的字符串 cde

 
SELECT REPLACE('abcdefghicde','cde','xxx');