您还可以尝试存储函数。类似:
CREATE FUNCTION daysdiff (
"start" INT,
"end" DATE
) RETURNS INT
DETERMINISTIC NO EXTERNAL ACTION
RETURN DAYS(DATE(
SUBSTR(DIGITS(daysdiff."start"),5,4) CONCAT '-' CONCAT
SUBSTR(DIGITS(daysdiff."start"),9,2) CONCAT '-01') - 1 DAY + 1 MONTH)
- DAYS(daysdiff."end")
CREATE FUNCTION monthly (
"days" INT
) RETURNS INT
DETERMINISTIC NO EXTERNAL ACTION
RETURN CEILING(monthly."days" / 30) * 30
CREATE FUNCTION daystr ("days" INT, "max" INT)
RETURNS char(4)
DETERMINISTIC NO EXTERNAL ACTION
RETURN
CASE WHEN daystr."days" <= daystr."max" THEN
CHAR(DECIMAL(daystr."days", INT(LOG10(daystr."max"))+1, 0))
ELSE '>' CONCAT CHAR(DECIMAL(daystr."max", INT(LOG10(daystr."max"))+1, 0))
END
CREATE FUNCTION monthlydiffstr (
"start" INT,
"end" DATE
) RETURNS INT
RETURN daystr(monthly(daysdiff(monthlydiffstr."start", monthlydiffstr."end")), 180)
上面的内容没有在DB2上进行测试;您的里程数和语法可能会有所不同。请随意重命名函数(当然是坏的),并将任务分解为您认为合适的函数。
daysdiff
可能会有所改进,这取决于
STOCK_MONTH
.