sqlserver 截取特殊字符附近的字符串 CHARINDEX,SUBSTRING,LEN,REPLACE

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 , '(', '(')
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值