自定义函数详解

发表日期:2022-08-22 11:12:52 | 来源: | | 浏览(1258) 分类: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的自定义函数,大体我想到两种方法:

  1. 建虚拟表把这5个数插进去,max取最大的,但是8万行数据开辟同等数量的临时表,我还是用第2种方式吧。

  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

效果:

image.png


集速网 copyRight © 2015-2022 宁ICP备15000399号-1 宁公网安备 64010402001209号
与其临渊羡鱼,不如退而结网
欢迎转载、分享、引用、推荐、收藏。