sql--CHARINDEX 函数和SUBSTRING 函数
2009-10-12 16:16
274 查看
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用法:
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
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
相关文章推荐
- 关于SQL利用charindex、substring等函数提取不同位置的值
- sql--CHARINDEX 函数和SUBSTRING 函数
- SQL 标量函数-----> 字符串函数 之四 字符串比较函数 CHARINDEX()、PATINDEX()、REPLICATE()、REVERSE()、REPLACE()、SPACE()、STUFF()
- 在MYSQL的SQL语句中截取字符串的函数SUBSTRING
- Sql字符串截取函数SUBSTRING
- SQL中Charindex和Oracle中对应的函数Instr
- SQL 中的基本函数:charindex(),convert(),LEFT()
- sql,scope_identity,procedure,tran,substring,cast,convert,charindex,插入角色的同时插入角色拥有的权限,权限使用权限列表表示,列表用逗号分隔权限的id,更新角色信息,同时更新权限信息
- SQL中left()函数和charindex()函数的使用
- SQL中Charindex和Oracle中对应的函数Instr对比
- 再用MS SQL substring()函数
- SQL常用函数之六 CHARINDEX()
- SQL的SubString()函数
- mysql中替代charindex的函数substring_index、find_in_set
- SQL中Charindex和Oracle中对应的函数Instr
- SQL中Charindex和Oracle中对应的函数Instr对比
- SQL中left()函数和charindex()函数的使用
- CharIndex函数的应用-存数过程SQL
- sql语句中charindex函数用法
- Sql Server substring(expression, start, length)函数