Db2 如何根据一定的逻辑创建检索年份的函数
我需要在DB2中创建一个函数,该函数将根据特定逻辑从当前日期检索年份Db2 如何根据一定的逻辑创建检索年份的函数,db2,stored-functions,Db2,Stored Functions,我需要在DB2中创建一个函数,该函数将根据特定逻辑从当前日期检索年份 如果当前日期的月份数小于等于6(=6月之前的任何月份),则上一年为“参考年” 否则,如果当前日期的月份数大于6(=6月之后的任何月份!),则当前年份为“参考年” 示例: 日期“2019年4月9日”的参考年份为2018年,自4月6日起 下面是SQL Server实现的示例: CREATE FUNCTION dbo.getReferenceYear() RETURNS int AS BEGIN
- 如果当前日期的月份数小于等于6(=6月之前的任何月份),则上一年为“参考年”
- 否则,如果当前日期的月份数大于6(=6月之后的任何月份!),则当前年份为“参考年”
- 日期“2019年4月9日”的参考年份为2018年,自4月6日起
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;
创建函数dbo.getReferenceYear()
返回整数
作为
开始
声明@retint;
选择@ret=MONTH(GETDATE())
IF(@ret创建函数dbo.getReferenceYear()
返回整数
作为
开始
声明@month INT,@year INT;
SET@month=从TableName中选择月份(ColumnName)
如果(_month这里有一种在DB2LUW中执行的方法:
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
创建或替换函数dbo.getReferenceYear()
返回整数
开始原子化
声明v_nowts timestamp默认当前时间戳;
宣布v_year int;
设置v_year=年份(v_nowts);
如果(月)我会这样做
CREATE FUNCTION getReferenceYear()
RETURNS SMALLINT
RETURN YEAR(CURRENT DATE) - CASE WHEN MONTH(CURRENT DATE) <= 6 then 1 ELSE 0 END
创建函数getReferenceYear()
返回SMALLINT
返回年份(当前日期)-当月份(当前日期)时的情况问题是什么?您能在db2中使用上述逻辑编写udf吗?@data\u henrik,请您帮助meSide注意:CURRENT TIMESTAMP
每次调用时可能会产生不同的值(取决于几件事)。您最好使用存储值,否则这样的查询结果可能会出错。我希望在db2中使用它,而不是在sql SERVER中。您可以在db2I中提供此udf吗?我遇到了一个错误,即函数序列错误
@mao…有其他选择吗?运行db2服务器的操作系统是什么(z/os、I-series、linux/unix/windows),以及您的Db2是什么版本?在替换或replace
之后,它得到了正确的执行。现在,您可以帮助我如何在Db2上验证它吗???
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 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