我已经搜寻了源,并且尝试过的每个版本都失败了。基本上,此函数需要一个日期,并且应该返回数字。
例如:2010年4月1日,将返回为-20160401,这似乎很简单,但这却花费了我数小时的时间。
CREATE OR REPLACE FUNCTION MAKE_KEY( DT DATE ) RETURN NUMBER IS
DATE_KEY NUMBER := 0;
yyyy SMALLINT := 2000;
mm SMALLINT := 1;
dd SMALLINT := 1;
BEGIN
IF DT IS NOT NULL THEN
yyyy := YEAR(DT);
mm := MONTH(DT);
dd := DAY(DT);
END IF;
DATE_KEY := (-1 * (yyyy * 10000 + mm * 100 + dd));
RETURN DATE_KEY;
END MAKE_KEY;
最简单,最短的解决方案是:
CREATE OR REPLACE FUNCTION MAKE_KEY( DT DATE ) RETURN NUMBER IS
BEGIN
RETURN TO_CHAR(DT, '-YYYYMMDD');
END;
您甚至不需要此功能,可以TO_CHAR(DT, '-YYYYMMDD')
直接在SQL或PL / SQL中使用。
它将为日期返回不同的结果,BC
但是我认为这与您的情况无关,否则RETURN -1*TO_CHAR(DT, 'YYYYMMDD');
如果你需要0
的NULL
输入,你可以做COALESCE(TO_CHAR(NULL, '-YYYYMMDD'),0)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句