SqlServer关于字符串截图和查找的问题

晨曦遇晓 2020-07-13 06:09:47
各位大神大佬 求道sql 因为字段设计的比较恶心 很多值都在一个字段上,所以需要根据一些标识去取数据 数据的内容如下:


我需要取倒数第二个@和最后一个@之间的数字 例如第一行数据的30,第二行数据的20,第三行数据的10 。。。 我目前能想到的函数就是类似java的indexof查询@出现的角标值和substring截取 大概的函数应该是substring(需要查询的字段,倒数第二个@出现的位置,倒数第一个@出现的位置) 但是现在倒数第二个@的还在搜答案中,正则表达式好像也可以 具体也查查看 有知道的大神帮帮我。。。万分感谢!
...全文
112 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨曦遇晓 2020-07-14
  • 打赏
  • 举报
回复
感谢 这这部分后面用用程序去完成的 我是先把数据查出来一个list 然后遍历的时候使用substring+rsplit完成的 然后切割完了之后获取最后一个角标的数组 因为对sqlserver用的不熟 最后把平均数算出来 总数/总条数 public static BigDecimal getAvgData(List<String> list){ if (!list.isEmpty()){ BigDecimal total=new BigDecimal("0.00"); for (String i:list){ String substring = i.substring(0, i.lastIndexOf("@")); String[] split = substring.split("@", 0); total=total.add(new BigDecimal(Integer.valueOf(split[split.length - 1]))); } BigDecimal avg = total.divide(new BigDecimal(list.size()),2, BigDecimal.ROUND_HALF_UP); return avg; } return null; }
唐诗三百首 2020-07-13
  • 打赏
  • 举报
回复

create table #t(x varchar(100))

insert into #t(x)
 select 'Veeva CRM@Sync Issue@登陆失败@30@' union all
 select 'EDW@Data Query and Confirm@检查用户没有岗位的原因@20@' union all
 select 'ICAN@Data Query and Confirm@用户咨询@10@ICAN'


select x=reverse(substring(reverse(x),
                           charindex('@',reverse(x))+1,
				           charindex('@',reverse(x),charindex('@',reverse(x))+1)-charindex('@',reverse(x))-1))
 from #t

/*
x
---------------------
30
20
10

(3 行受影响)
*/

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧