SQL Server 取字符串常用的函数

一、SQL 截取字符串

 

1、LEFT ( character_expression , integer_expression )  

      函数说明:LEFT ( '源字符串' , '要截取最左边的字符数'  )  
      返回从字符串左边开始指定个数的字符  

2、RIGHT ( character_expression , integer_expression )  

      函数说明:RIGHT ( '源字符串' , '要截取最右边的字符数'  )  
      返回字符串中从右边开始指定个数的 integer_expression 字符  
  
3、SUBSTRING ( character_expression , start , length )  

      函数说明:SUBSTRING ( '源字符串' , '截取起始位置(含该位置上的字符)' , '截取长度' )  
      返回字符、binary、text 或 image 表达式的一部分  

 二、SQL字符串查找

1、 CHARINDEX ( expression1 , expression2 [ , start_location ] ) 
参数 
CHARINDEX 
返回字符串中指定表达式的起始位置。 
语法 
CHARINDEX ( expression1 , expression2 [ , start_location ] ) 
参数 
expression1 
一个表达式,其中包含要寻找的字符的次序。expression1 是一个短字符数据类型分类的表达式。 
expression2 
一个表达式,通常是一个用于搜索指定序列的列。expression2 属于字符串数据类型分类。 
start_location 
在 expression2 中搜索 expression1 时的起始字符位置。如果没有给定 start_location,而是一个负数或零,则将从 expression2 的起始位置开始搜索。 
返回类型 
int 

select * from table_a where charindex('a',id)>0 or charindex('b',id)>0 
table_a 表中 id字段中含有"a"或者"b"的记录。


2、PATINDEX ( "%pattern%" , expression ) 
PATINDEX函数返回字符或者字符串在另一个字符串或者表达式中的起始位置,PATINDEX函数支持搜索字符串中使用通配符,这使PATINDEX函数对于变化的搜索字符串很有价值。
Pattern是你要搜索的字符串,expression是被搜索的字符串。一般情况下expression是一个表中的一个字段,pattern的前后需要用“%”标记,除非你搜索的字符串在被收缩的字符串的最前面或者最后面。 

和CHARINDEX函数一样,PATINDEX函数返回搜索字符串在被搜索字符串中的起始位置。假如有这样一个PATINDEX函数: 

PATINDEX("%BC%","ABCD") 

这个PATINDEX函数返回的结果是2,这和CHARINDEX函数一样。这里的%标记告诉PATINDEX函数去找字符串“BC”,不管被搜索的字符串中在“BC”的前后有多少字符! 
假如你想知道被搜索字符串是否由特定的字符串开始,你可以省去前面的%标记。PATINDED函数就要这样写: 

PATINDEX("AB%","ABCD") 

这个命令执行的结果返回1,表示搜索的字符串“AB”在被搜索的字符串中“ABCD”被找到。 

使用通配符可以编辑比我以上举得简单例子复杂得多的搜索字符串。假如说你要确定一个字符串是否包含字母A和Z,还有任何数字,这个PARINDEX函数命令可能像这样: 
PATINDEX("%[A,Z,0-9]%[A,Z,0-9]%[A,Z,0-9]%","XYZABC123") 

Description字段中是包含单词“Bread”或“bread”的所有记录,那么选择语句就可能是这样: 

SELECT Description from Northwind.dbo.Categories 
WHERE patindex("%[b,B]read%",description) > 0 
这个例子是如何选出上面的查询结果中,Description字段的第二子字母不是“e”的纪录。 
select Description from Northwind.dbo.Categories 
where patindex("%[b,B]read%",description) > 0 
and patindex("_[^e]%",description) = 1 

 

posted @ 2016-08-07 08:58  一枚水  阅读(1496)  评论(0)    收藏  举报