1,图示
1.1 目的:截取特殊字符附近的字符串
1.2 语法:
select id,substring(str,charindex(',',str)+1,len(str)-charindex(',',str)) from test;
1.3 应用:
SELECT DISTINCT
name ,
CHARINDEX( '(', name ) locate,
SUBSTRING ( name , CHARINDEX( '(', name ) + 1, LEN( name ) - CHARINDEX( '(', name ) - 1 ) yaname,
LEN( name ) length
FROM
table
1.4 结果:
2,知识点解析:
2.1, CHARINDEX(expression1, expression2 [,start_location]) 默认位置从1开始
expression1:要寻找的字符
expression2:为指定序列搜索的列
如:CHARINDEX( ‘(’, name ) 返回值为7
注意:如果找不到的话,则返回0,也可以多字符查找
select CHARINDEX( 'hello', 'world hell' ) --返回0
select CHARINDEX( 'hello', 'world hello' ) --返回7
2.2, SUBSTRING(expression, start, length)
expression:为指定序列搜索的列
start:开始截取字符的位置
length:截取字符的长度
select SUBSTRING('abcde',1,2) --返回结果 ab
select SUBSTRING('abcde',0,1) --返回结果为空
select SUBSTRING('abcde',1,0) --返回结果为空
select SUBSTRING('abcde',0,8) --返回结果为abcde,注意后面没有空格了。
select SUBSTRING('abcde',-5,7) --返回结果为a
2.3, LEN(string_expression)
string_expression:需要计算的字符长度
select LEN(' h ello '),LEN('汉字'),LEN(123456); --7 2 6
注意:
1,汉字,英文,数字都算作一个字符
2,位于末尾的空格不算字符个数,但是在首部或者中部的空格计入字符个数
3,数字类型不需要引号
2.4 , REPLACE(string_expression, string_pattern, string_replacement)
string_expression:需要处理的字符
string_pattern:被替换的旧字符
string_replacement:替换的新字符
select REPLACE(' hello',' ',123); --返回结果123hello
一般我都用作对数据库中不规范的字符进行处理
比如: 将中文的括号转换为英文的括号
update table set name =REPLACE(name , '(', '(')