自定义函数详解
发表日期:2022-08-22 11:12:52 | 来源: | | 浏览(1755) 分类:SQLServer
CREATE FUNCTION [dbo].[函数名] ( @Id int,@date1 datetime --入参 ) RETURNS varchar(1000) -- 返回值 AS BEGIN declare @Str varchar(8000) -- 业务逻辑 -- SQL思路拔高可以参考存储过程那篇文章,写的非常细 -- http://www.canquick.com/article/ARTICLE_B176685DBB653F60CE765750.html RETURN @Str -- 返回值 END go grant execute, view definition on 函数名to [] go
好巧不巧。今天一个同事想实现:表里有5个字段都是数字,但是想只查出来这五个字段里最大的,问SQL能实现吗?
答,用SQL的自定义函数,大体我想到两种方法:
建虚拟表把这5个数插进去,max取最大的,但是8万行数据开辟同等数量的临时表,我还是用第2种方式吧。
定义一个变量,逐个比较,简单思路清晰,就是傻瓜了点(有null值 所以注意要处理)
CREATE FUNCTION [dbo].[MaxNumber]( @no1 float, @no2 float, @no3 float, @no4 float, @no5 float ) RETURNS float AS BEGIN declare @maxno float if isnull(@no1, 0) > isnull(@no2, 0) set @maxno = isnull(@no1, 0) else set @maxno = isnull(@no2, 0) if isnull(@maxno, 0) < isnull(@no3, 0) set @maxno = isnull(@no3, 0) if isnull(@maxno, 0) < isnull(@no4, 0) set @maxno = isnull(@no4, 0) if isnull(@maxno, 0) < isnull(@no5, 0) set @maxno = isnull(@no5, 0) return @maxno END go
效果: