将 SQL 查询转换为 SQL 函数?

Posted

技术标签:

【中文标题】将 SQL 查询转换为 SQL 函数?【英文标题】:Convert SQL query to SQL functions? 【发布时间】:2020-06-01 03:26:58 【问题描述】:

我正在研究 SQL 函数

我创建了一个查询并查询成功运行,但我想将它们转换为 SQL 函数

我在查询天数和年份返回两个参数

我想将 SQL 查询转换为 SQL 函数,见下图

sql查询

    Declare @dateofbirth datetime  
    Declare @currentdatetime datetime  
    Declare @years varchar(4)  
    Declare @days varchar(4)  
    set @dateofbirth = '2020-01-25 ' 
    set @currentdatetime  = getdate()   
    select @years = datediff(year,@dateofbirth,@currentdatetime)    
    select @days = datediff(DAY,@dateofbirth,@currentdatetime)
    select @years   + ' years,'  
    select @days   + ' days,'

我可以使用多语句表值函数 (MSTVF),因为我的查询返回多个参数天数和年数

ssms 中可用的 3 个函数

表值函数

新的内联表值函数 标量多语句表值函数

标量值函数

聚合函数

我不确定应该使用哪个功能?

我想

【问题讨论】:

【参考方案1】:

您可以使用标量函数来实现这一点。

但是你必须在输出中使用CONCAT函数,函数中没有其他选项可以返回多选查询。

您还可以使用 Table Valued 函数获取 Table 格式的输出。

CREATE Function dbo.Years_Days(@dateofbirth datetime, @currentdatetime datetime)
RETURNS VARCHAR(MAX) AS
BEGIN
    Declare @years varchar(4)  
    Declare @days varchar(4)  

    set @currentdatetime  = ISNULL(@currentdatetime,getdate());
    select @years = datediff(year,@dateofbirth,@currentdatetime)    
    select @days = datediff(DAY,@dateofbirth,@currentdatetime)

    RETURN  @years   + ' years,' + @days   + ' days,'
END


SELECT dbo.Years_Days(  '2020-01-25 ', NULL);

函数类型取决于返回数据类型

如果返回的数据类型是表,那么它需要是表值函数。

进一步,点击以下链接:

Functions In SQL Server

【讨论】:

以上是关于将 SQL 查询转换为 SQL 函数?的主要内容,如果未能解决你的问题,请参考以下文章

使用函数 SUM() 和 Group by 将 Mysql 查询转换为 SQL 查询

将多个 self JOIN 转换为窗口函数或子查询 (SQL)

将 SQL 查询结果转换为字符串数组

SQL 查询将列转换为行

如何将 JSON 转换为 SQL 查询 - php

SQL适当案例函数查询细化