如何根据特定逻辑创建一个检索年份的函数

How to create a function which will retrieve year, based on a certain logic

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

示例:

下面是 SQL 服务器的实施示例:

 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
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

这是在 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

我会这样做

CREATE FUNCTION getReferenceYear()  
RETURNS SMALLINT
RETURN YEAR(CURRENT DATE) - CASE WHEN MONTH(CURRENT DATE) <= 6 then 1 ELSE 0 END