暴力求值

1.0(3),2.0(4),3.5(5),3.5111(78),55.98(23345)
12.0(2),3.5(5)
4567.0(344),234.43(2323),3.5(5),3.5111(78),55.98(23345)
 
 
 
1307155.46580
41.50000
3422773.35580
 
 
 
create function toolkindvalues(@str varchar(8000) )
returns decimal(18,5)
as
begin
declare @result decimal(18,5)
set @result=0
declare @charindex int
set  @charindex=0
declare @replacestr varchar(500)
 
while  (charindex(',',@str,0)>0)
begin
  
select  @charindex=charindex(',',@str,0)
select @replacestr=substring (@str,0,@charindex)
 
select  @str= replace( @str,@replacestr+',','')
 
 --select   @replacestr
 --select   left(@replacestr, charindex( '(',@replacestr,0)-1),left( right(@replacestr,2),len(right(@replacestr,2))-1)
select  @result=@result+ cast( left(@replacestr, charindex( '(',@replacestr,0)-1)  as decimal(18,5))  *  cast ( substring( replace( @replacestr,left(@replacestr, charindex( '(',@replacestr,0)-1),''),2,len(replace( @replacestr,left(@replacestr, charindex( '(',@replacestr,0)-1),''))-2)   as decimal(18,5) )
end
 
 --select   @str
 
select   @result=@result+ castleft(@str, charindex( '(',@str,0)-1) as decimal(18,5))  *   cast ( substring( replace( @str,left(@str, charindex( '(',@str,0)-1),''),2,len(replace( @str,left(@str, charindex( '(',@str,0)-1),''))-2)  as decimal(18,5) )
 
 
return @result
 
end
 
 
 
 
--drop  table #ddd
 
create table #ddd(str varchar(500))
 
 
 
insert #ddd
 
select '1.0(3),2.0(4),3.5(5),3.5111(78),55.98(23345)'  
union
select '4567.0(344),234.43(2323),3.5(5),3.5111(78),55.98(23345)'  
union
select '12.0(2),3.5(5)'  
 
 
select  from  #ddd
 
select dbo.toolkindvalues(str)   from #ddd
posted @   qanholas  阅读(309)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
点击右上角即可分享
微信分享提示