如何基于某种逻辑创建一个将检索年份的函数

问题描述 投票:1回答:3

我需要在DB2中创建一个函数,它将根据某个逻辑从当前日期检索年份

  • 如果当前日期的月份数小于等于6(= 6月之前的任何月份),那么前一年是“参考年份”
  • 否则,如果当前日期的月份数大于6(= 6月后的任何月份!)那么当前年份是“参考年份”。

例子:

  • 日期'4/9/2019'的参考年份是2018年,因为4 <= 6
  • 日期'9/3/2019'的参考年份是2019年,因为9> 6

下面是SQL Server实现的示例:

 CREATE FUNCTION dbo.getReferenceYear()  
 RETURNS int   
 AS   

 BEGIN  
 DECLARE @ret int;  
 SELECT @ret = MONTH(GETDATE())

  IF (@ret <= 6)   
    SET @ret = (YEAR(GETDATE()) -1); 
    Else 
    SET @ret = (YEAR(GETDATE()) ); 
   RETURN @ret;  
 END;

我在db2中需要相同的东西。

以下是我的尝试

CREATE FUNCTION dbo.getReferenceYear()  
 RETURNS INT
 BEGIN ATOMIC

 DECLARE _month INT;
 DECLARE _year INT;

  SET _month = SELECT MONTH (current timestamp)  FROM sysibm.sysdummy1 

  if(_month<=6)
  SET _year = (SELECT YEAR (current timestamp)  FROM sysibm.sysdummy1) -1
  ELSE
  SET _year = (SELECT YEAR (current timestamp)  FROM sysibm.sysdummy1)

 RETURN _year
END
db2 stored-functions
3个回答
1
投票

这是Db2-LUW中的一种方法:

CREATE or replace FUNCTION dbo.getReferenceYear()  
 RETURNS INT
 BEGIN ATOMIC

  declare v_nowts timestamp default current timestamp;
  declare v_year int;

  set v_year= year(v_nowts);
  if ( month(v_nowts) <= 6 ) THEN
     SET v_year = v_year -1;
  END IF;
  RETURN v_year ;
END

0
投票
CREATE FUNCTION dbo.getReferenceYear()  
 RETURNS INT
 as
 BEGIN     
 DECLARE @month INT,@year INT;    
  SET @month = SELECT MONTH (ColumnName)  FROM TableName    
  if(_month<=6)
  SET @year = (SELECT YEAR (ColumnName)  FROM TableName -1)
  ELSE
  SET @year = (SELECT YEAR (ColumnName)  FROM TableName)    
 RETURN @year
END

或者,如果您没有任何列日期,并且如果您想为当前日期应用相同的逻辑,那么 -

 CREATE FUNCTION dbo.getReferenceYear()  
  RETURNS INT
  as
  BEGIN 
  DECLARE @month INT,@year INT;
   SET @month =( SELECT MONTH (GETDATE())  )      
   if(@month<=6)
   SET @year = (SELECT YEAR (GETDATE())-1)  
   ELSE
   SET @year = (SELECT YEAR (GETDATE()) )
  RETURN @year
  END

0
投票

我会这样做的

CREATE FUNCTION getReferenceYear()  
RETURNS SMALLINT
RETURN YEAR(CURRENT DATE) - CASE WHEN MONTH(CURRENT DATE) <= 6 then 1 ELSE 0 END
© www.soinside.com 2019 - 2024. All rights reserved.