图示
语句:
SELECT DISTINCT
unitname,
CHARINDEX( '(', unitname ) locate,
SUBSTRING ( unitname, CHARINDEX( '(', unitname ) + 1, LEN( unitname ) - CHARINDEX( '(', unitname ) - 1 ) yaname,
LEN( unitname ) length
FROM
CBHS_XMFT_UNITEQUIPCOMMON
结果:
知识点解析:
1, CHARINDEX(expression1, expression2 [,start_location]) 默认位置从1开始
expression1:要寻找的字符
expression2:为指定序列搜索的列
如:CHARINDEX( ‘(’, unitname ) 返回值为7
注意:如果找不到的话,则返回0,也可以多字符查找
select CHARINDEX( 'hello', 'world hell' ) --返回0
select CHARINDEX( 'hello', 'world hello' ) --返回7
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
3, LEN(string_expression)
string_expression:需要计算的字符长度
select LEN(' h ello '),LEN('汉字'),LEN(123456); --7 2 6
注意:
1,汉字,英文,数字都算作一个字符
2,位于末尾的空格不算字符个数,但是在首部或者中部的空格计入字符个数
3,数字类型不需要引号
4, REPLACE(string_expression, string_pattern, string_replacement)
string_expression:需要处理的字符
string_pattern:被替换的旧字符
string_replacement:替换的新字符
select REPLACE(' hello',' ',123); --返回结果123hello
一般我都用作对数据库中不规范的字符进行处理
比如: 将中文的括号转换为英文的括号
update sys_info set unitname=REPLACE(unitname, '(', '(')