我有一個函數,我已經設置爲返回一個INT函數,從傳遞給函數的日期計算,偶爾函數返回NULL是我所期望的一次又一次,但不是將調用函數封裝在ISNULL中以返回「N/A」,我怎麼能在函數中做到這一點。返回N/A當從返回INT的函數返回NULL - SQL SERVER
可以返回多個數據類型 - 一次不超過一個 - 但是如果返回值爲NULL,則返回INT或Varchar?我的標量函數如下。它創建的週數(1-4)從上週六28天的時間內一個臨時表,然後用它來返回傳遞給函數的日期相關聯的週數:
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!),並且將返回值更改爲varchar會使一切變得更簡單!
當值不適用時,確保將返回值保留爲NULL,並在稍後的時間將*格式*作爲N/A處理。 –
@Damien_The_Unbeliever我完全同意你的看法。格式化是需要格式化的層(最終是前端)的角色。 SQL Server應該返回TRUE值的數據。 –