想破头皮的问题:计算列的case..when判断

wooden954 wooden954 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
有一表,其中一列名为MyCol,数据类型为Varchar(100),存储的是十六进制的数据。
定义了一个函数GetContent,这个函数比较复杂,用来计算Col列中的部分数据内容,这个函数可能执行十六进制字符串转换成十进制数值的过程,并且还受到十六进制数据之间的关系影响。
我想用这个函数计算出一个计算列来,再根据计算列的取值显示一个提示信息,类似于

select ID,Name,MyCol,
tmp=dbo.GetContent(Substring(MyCol,8,2)),
case
when tmp>=128 then '每'+cast(Tmp-128 as varchar(10))
else Cast(tmp as varchar(10))
end
from MyTable

但是总是不能实现,如果使用类似于如下的SQL语句,实现倒是能够实现,可就是跟踪的时候执行的SQL代码实在是太长了,效率非常低。因为它执行了好几次定义的函数。
select ID,Name,MyCol,
case
when dbo.GetContent(Substring(MyCol,8,2))>=128 then '每'+cast(dbo.GetContent(Substring(MyCol,8,2))-128 as varchar(10))
else Cast(dbo.GetContent(Substring(MyCol,8,2)), as varchar(10))
end
from MyTable

怎么能够让函数执行次数最少还能够达到要求?
...全文

相关推荐

评论 9
收藏 已收藏
分享
返回顶部
wooden954
MS-SQL Server 34,876 成员 254,635 内容