将日期转换为主键的数字

时间:2016-03-17 16:58:25

标签: sql oracle plsql

我正在尝试将一些值输入到我创建的维度表中,但我一直收到以下错误 -

  DECLARE
      vstartDate number(10):= to_number(to_char('&StartDate','DDMMYYYY')); 
      vendDate number(10) := to_number(to_Char('&EndDate','DD/MM/YYYY'));
      vdate_key number(10) not null:= to_number(to_Char(sysdate, 'DD/MM/YYYY'));

我正在尝试将输入日期从格式DD / MM / YYYY转换为可以作为维度表的主键的数字。它似乎是错误的格式。任何人都可以对此有所了解

REPLACE

由于

1 个答案:

答案 0 :(得分:1)

我不确定为什么你需要主键作为数字;难道你不能把它当作约会吗?

无论如何,问题在于您忘记将传递的字符串转换为日期,然后将其作为数字传回。目前,您正在尝试将字符串转换为字符串,然后确保在尝试将其转换为数字之前将其转换为正斜杠。数字不能包含正斜杠!

以下是我认为您的目标:

DECLARE
  vstartDate number(10):= to_number(to_char(to_date('&StartDate','DD/MM/YYYY'), 'YYYYMMDD')); 
  vendDate number(10) := to_number(to_char(to_date('&EndDate','DD/MM/YYYY'), 'YYYYMMDD'));
  vdate_key number(10) not null := to_number(to_Char(sysdate, 'YYYYMMDD'));

请注意,我已将输出数字的格式更改为YYYYMMDD,因为这样更容易排序。不过,我仍然宁愿将日期存储为日期!