如何根据特定逻辑创建一个检索年份的函数
How to create a function which will retrieve year, based on a certain logic
我需要在 DB2 中创建一个函数,它会根据特定逻辑从当前日期检索年份
- 如果当前日期的月份数小于等于 6(=6 月之前的任何月份),则上一年为“参考年”
- 否则,如果当前日期的月份数大于 6(=6 月之后的任何一个月!),则当前年份为“参考年”。
示例:
- 日期“4/9/2019”的参考年份是 2018 年,因为 4 <= 6
- 日期“9/3/2019”的参考年份是 2019,因为 9 > 6
下面是 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
我需要在 DB2 中创建一个函数,它会根据特定逻辑从当前日期检索年份
- 如果当前日期的月份数小于等于 6(=6 月之前的任何月份),则上一年为“参考年”
- 否则,如果当前日期的月份数大于 6(=6 月之后的任何一个月!),则当前年份为“参考年”。
示例:
- 日期“4/9/2019”的参考年份是 2018 年,因为 4 <= 6
- 日期“9/3/2019”的参考年份是 2019,因为 9 > 6
下面是 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