sqlserver 分段截取字符串

sqlserver 分段截取字符串,第1张

概述问题:最近在项目上碰到一个关于清单排序的问题,系统根据清单编号进行排序,而数据库保存的清单编号是字符串类型,当碰到清单编号为207-1,207-10,207-2这种情况时,页面排序顺序就为 207-1,207-10,207-2;正确的顺序应该是 207-1,207-2,207-10。 考虑到表中清单编号有一二三四级不同的结构,所以要对清单的结构进行判断,然后分段截取字符串。 在网上搜了很多都是关于

问题:最近在项目上碰到一个关于清单排序的问题,系统根据清单编号进行排序,而数据库保存的清单编号是字符串类型,当碰到清单编号为207-1,207-10,207-2这种情况时,页面排序顺序就为 207-1,207-10,207-2;正确的顺序应该是 207-1,207-2,207-10。

考虑到表中清单编号有一二三四级不同的结构,所以要对清单的结构进行判断,然后分段截取字符串。

在网上搜了很多都是关于固定结构的字符串截取方式,所以将自己写的条件判断截取贴出来,有待改进之处还请多指教。(第一次发技术贴)

 

select charindex('-',ipqb_code),ipqb_code --截取第一层(判断是否存在字符'-'。存在,取字符'-'左边的字符串,不存在,取整个字符串),case when charindex('-',ipqb_code) > 0 then left(ipqb_code,CHARINDEX('-',ipqb_code)-1) else ipqb_code end ipqb_code1--截取第二层(判断是否存在字符'-',存在,将第一个字符'-'及其左边的字符用空字符串替换,再判断替换后的字符串是否包含'-',包含,则取替换后的字符串中字符'-'左边的字符串,否则,反转然后取字符'-'右边的字符串;else取'0'),ipqb_code) > 0       then 	case when charindex('-',stuff(ipqb_code,1,charindex('-','')) > 0	     then left(stuff(ipqb_code,''),''))-1)	     else right(ipqb_code,reverse(ipqb_code))-1)	end      else '0' end ipqb_code2--截取第三层(与第二层逻辑一样,只是多包一层),ipqb_code) > 0       then	case when charindex('-','')) > 0	     then		case when charindex('-',stuff(stuff(ipqb_code,'')),'')) > 0		     then left(stuff(stuff(ipqb_code,'')) - 1)		     else right(ipqb_code,reverse(ipqb_code))-1)		end	     else '0'	end      else '0'end ipqb_code3from bill
总结

以上是内存溢出为你收集整理的sqlserver 分段截取字符串全部内容,希望文章能够帮你解决sqlserver 分段截取字符串所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1172306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存