sqlserver 按分隔符截取字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver 按分隔符截取字符串相关的知识,希望对你有一定的参考价值。

第一次接触SQLSERVER,遇到一个不会的,请教下。
比如我查询得到的一个字段的格式是 ADFASDFD(DASFADSFAS),由于字符串太长,我想按左括号进行截断,取得左括号( 前面的字符串。
请问如何实现?

可以参考下面的代码:

select substring('ADFASDFD(DASFADSFAS)',1,charindex('(','ADFASDFD(DASFADSFAS)')-1)

主要用到两个函数,一个charindex,这个是判断指定字符位置的函数。

另一个是substring,这个是截取字符串的函数。

扩展资料:

sqlserver参考函数

upper(char_expr) 转为大写

lower(char_expr) 转为小写

space(int_expr) 生成int_expr个空格

reverse(char_expr) 反转字符串

stuff(char_expr1,start,length,char_expr2) 将字符串char_expr1中的从

参考资料来源:百度百科-SqlServer

参考技术A select substring('ADFASDFD(DASFADSFAS)',1,charindex('(','ADFASDFD(DASFADSFAS)')-1)

看看,是不是这样

主要用到两个函数,一个charindex,这个是判断指定字符位置的函数

另一个是substring,这个是截取字符串的函数

本回答被提问者采纳

sql截取第2个和第3个分隔符之间的字符串

分隔符:<br>
字符串(例):1<br>23<br>456<br>7890
现在要取数据456(长度不定)即第2个<br>和第3个<br>之间的字符串
用sql怎么写
另外 这只是所有数据中的一行余下的也是做同样的处理
数据库 sqlserver 2008 r2

select substring('1<br>23<br>456<br>7890',CHARINDEX('1<br>23<br>456<br>7890','<br>',1,2)+4,(CHARINDEX('1<br>23<br>456<br>7890','<br>',1,3)-CHARINDEX('1<br>23<br>456<br>7890','<br>',1,2)-4)) from table

这是sqlserver的函数了
思路就是:获取第2个<br>的位置,加4(<br>这个字符串的长度),然后截取其之后到第三个<br>的长度的字符串。
这是substring 的api
SUBSTRING(string,start_position,[length])    求子字符串,返回字符串
解释:string 元字符串
       start_position   开始位置(从0开始)
       length 可选项,子字符串的个数

追问

别的暂且不管,啥时CHARINDEX()有四个参数了。。。。。。

追答

这个,instr是四个参数的。

charindex没有第四个参数,那就要用嵌套了。
charindex('abc','a',charindex('abc','a',1)+1);这种模式

参考技术A 写一个函数,获取出两个分割符间的内容。charindex获取分割符位置,结合Left和Right追问

大哥,能具体点么?

参考技术B substr('字符串',

locate('<br>','字符串',locate('<br>','字符串')+1)+1,

locate('<br>','字符串', locate('<br>','字符串',locate('<br>','字符串')+1)+1))
有点乱,第二行是截取第二个分割符出现的位置+1,以此类推,一般超过第4个位置就写函数了,可以百度下,很多本回答被提问者采纳
参考技术C create table #a(id int identity,col nvarchar(200))
insert into #a(col)
values('1<br>23<br>456<br>7890'),('1<br>456<br>3<br>55'),('34<br>1<br>43<br>2')

;with cte as(
select *,convert(xml,'<br>'+rtrim(replace(col,'<br>','</br><br>'))+'</br>') as col2 from #a
)select id,col2.value('(/br)[3]','nvarchar(max)') as col from cte

id col
----------- ------------
1 456
2 3
3 43

以上是关于sqlserver 按分隔符截取字符串的主要内容,如果未能解决你的问题,请参考以下文章

oracle 按字符串截取字段

java 截取一空格为分隔符的字符串

python截取指定分隔符后面的字符串

关于sqlServer2005数据库字符串的截取?

sql截取第2个和第3个分隔符之间的字符串

如何截取一段sql中某个字符串之前的内容,在线等