【问题标题】:Return N/A when null from Function that returns INT - SQL SERVER从返回 INT 的函数返回 N/A - SQL SERVER
【发布时间】:2014-07-22 10:26:24
【问题描述】:

我有一个函数,我设置它返回一个 INT 周数,它是根据传递给函数的日期计算得出的,有时该函数返回 NULL,这是我不时期望的,但不是包装调用ISNULL 中的函数返回“N/A”我如何在函数中执行此操作。

是否可以返回一种以上的数据类型——一次不超过一种——但如果返回值为 NULL,则可以返回 INT 或 Varchar?我的标量函数如下。它为从上周六开始的 28 天期间创建一个包含周数 (1-4) 的临时表,然后使用它返回传递给函数的日期的相关周数:

ALTER FUNCTION [dbo].[daterangeweeknumber]
(
 -- Add the parameters for the function here

 @refdate datetime

)

RETURNS int
AS
BEGIN

-- Run procedure to populate table



-- Declare the return variable here
DECLARE @weeknumber int
DECLARE @mytemptablevariable table (weeknumber INT,fromdate DATETIME,todate DATETIME)
DECLARE @lastsaturdaydate DATETIME

set @lastsaturdaydate = DATEADD(DAY, DATEDIFF(DAY, '18991230', GETDATE()) / 7 * 7, '18991230')

-- Add the T-SQL statements to compute the return value here
INSERT INTO @mytemptablevariable 
values (1, DATEADD(DAY, -27, @lastsaturdaydate), DATEADD(DAY, -21, @lastsaturdaydate))
INSERT INTO @mytemptablevariable 
values (2, DATEADD(DAY, -20, @lastsaturdaydate), DATEADD(DAY, -14, @lastsaturdaydate))
INSERT INTO @mytemptablevariable 
values (3, DATEADD(DAY, -13, @lastsaturdaydate), DATEADD(DAY, -07, @lastsaturdaydate))
INSERT INTO @mytemptablevariable 
values (4, DATEADD(DAY, -6, @lastsaturdaydate), @lastsaturdaydate)

select @weeknumber = weeknumber
from @mytemptablevariable
where @refdate >= fromdate AND @refdate <= todate

-- Return the result of the function
RETURN @weeknumber

END

编辑:我刚刚意识到不能将 INT 和 Varchar 返回到同一列(DOH!)并且将 return 更改为 varchar 会使一切变得更简单!

【问题讨论】:

  • 当返回值不适用时,将返回值保留为NULL 并在稍后处理N/Aformatting 确实会更干净。
  • @Damien_The_Unbeliever 我完全同意你的看法。格式化是需要格式化的层的角色(通​​常是前端)。 SQL Server 应该返回数据的 TRUE 值。

标签: sql-server function date-range isnull


【解决方案1】:

在调用函数的任何地方都使用以下内容

 SELECT ISNULL(CAST(dbo.daterangeweeknumber(GETDATE()) AS VARCHAR(10), 'N/A')

【讨论】:

  • 感谢您的建议 - 我最终还是坚持返回一个 varchar 值
【解决方案2】:

你可以声明你的函数返回一个sql_variant,然后它可以包含一个int或一些文本,但我强烈建议不要这样做——你以后会发现自己陷入困境试图处理以一种理智的方式使用这些数据 - 远远超过你现在接受你有一个可以为空的 int 所做的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 2023-03-15
    • 2010-09-21
    • 1970-01-01
    相关资源
    最近更新 更多