我需要在DB2中创建一个函数,它将根据某个逻辑从当前日期检索年份
例子:
下面是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-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 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
我会这样做的
CREATE FUNCTION getReferenceYear()
RETURNS SMALLINT
RETURN YEAR(CURRENT DATE) - CASE WHEN MONTH(CURRENT DATE) <= 6 then 1 ELSE 0 END