Oracle 将日期转换为密钥失败
我已经搜遍了资料来源,我尝试过的每一个版本都失败了。 基本上,此函数接受日期并返回数字 例如:2010年4月1日,将返回-20160401 这看起来很简单,但这花费了我几个小时的时间Oracle 将日期转换为密钥失败,oracle,Oracle,我已经搜遍了资料来源,我尝试过的每一个版本都失败了。 基本上,此函数接受日期并返回数字 例如: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
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;
您应该在plsql中编写:
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 := extract(year from DT);
mm := extract(month from DT);
dd := extract(day from 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;
您甚至不需要函数,可以直接在SQL或PL/SQL中使用TO_CHAR(DT,'-YYYYMMDD')
对于日期BC
它将返回不同的结果,但我认为这与您的情况无关,否则返回-1*TO_CHAR(DT,'yyyyymmdd')代码>
如果您需要
0
进行NULL
输入,您可以执行合并(TO_CHAR(NULL,-YYYYMMDD'),0)
您已标记为oracle,但代码不是oracle。请设置正确的标签。这是我尝试的第一件事,但它不起作用。谢谢