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










 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   
   

转载于:https://www.cnblogs.com/pengpaidongli/archive/2009/07/31/1536155.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值