sql--CHARINDEX 函数和SUBSTRING 函数

CHARINDEX语法:
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
如果expression2中找不到expression1,则
CHARINDEX 返回0。

CHARINDEX 将根据输入的排序规则执行比较操作。若要以指定排序规则进行比较,则可以使用 COLLATE 将显式排序规则应用于输入值。返回的开始位置从 1 开始,而非从 0 开始。

这个函数命令将返回在“expression2 ”中“expression1”的起始位置



SUBSTRING用法:

SUBSTRING (expression,start,length)

expression:字符串、二进制字符串、文本、图像、列或包含列的表达式。请勿使用包含聚合函数的表达式。

start:整数或可以隐式转换为 int 的表达式,指定子字符串的开始位置。

length: 整数或可以隐式转换为 int 的表达式,指定子字符串的长度。


举例说明:(在存储方面的使用)打开SQL server- 新建查询-直接复制进去即可。

   
      

        DECLARE @paddy INT
        DECLARE @str nvarchar(max)
        DECLARE @strSQL NVARCHAR(max)
        DECLARE @strSQLSort NVARCHAR(4000)
        DECLARE @strWhereSQL NVARCHAR(2000)

        SET @str='id=0916order by Name desc'   
        SET @paddy=CHARINDEX('ORDER', @str, 0)   
        SET @strWhereSQL = SUBSTRING(@str, 1, (CHARINDEX('ORDER', @str, 0)-1))
        SET @strSQLSort = SUBSTRING(@str, (CHARINDEX('ORDER', @str, 0)), LEN(@str))
        
        PRINT @paddy
        PRINT @strWhereSQL
        PRINT @strSQLSort


输入结果:

8
id=0916
order by Name desc

用法说明:

 如果在charindex未指定start_location,或者 start_location为负数或 0,则将从expression2的开头开始搜索。

即:从本例中的str字符串中的i开始搜索,从1开始。当匹配到order时,返回在‘id=0916order by Name desc’中‘order’的起始位置,即为8.

本例中第一个substring从1位置开始,长度为7(8-1),截取字符串,即为id=0916

(注意)

如果本例中第一个substring从0位置开始,长度也为7,则截取字符串为id=091

即:SET @strWhereSQL = SUBSTRING(@str, 0, (CHARINDEX('ORDER', @str, 0)-1))

则输入结果第2行为:id=091

原因:我是这样理解的,当从0位置开始时,就是从i的前面1位开始计数截取长度为7的字符串,(_id=091)长度为7

依次类推,如果从-1位置开始时,就是从i的前面2位开始计数, 结果为:id=09 (类似这样的**id=09也是长度为7)

(仅个人观点!!!)


PS:

本例中的第二个substring所输入的结果不用解释了,相信也明白原因!!!

LEN函数用法:

返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。

语法

LEN (string_expression)

参数

string_expression要计算的字符串表达式。

返回类型

int

posted @ 2009-10-12 16:16  旭 日  阅读(1250)  评论(0编辑  收藏  举报