当存在变化时传递varchar2(7)值时如何转换为日期格式?

时间:2018-03-12 15:29:46

标签: sql oracle

所以我以varchar2(7)格式传递数据,我需要将其转换为日期格式,然后插入触发器中。我知道函数to_Date(date,' dddyyyy')存在,但有dddyyyy和ddyyyy格式的值。我已尝试过以下操作,但仍然需要在一个月的某一天和每个月的最后一天之间进行操作。错误。我的代码如下:

Insert into Submission
(RESPONDENT_ID, SUBMISSION_DT, SUBMISSION_TYPE_ID, SUBMISSION_NAME_TX, SUBMISSION_SEQ_NB, CREATE_DT, CREATE_USER_ID, MODIFY_DT, MODIFY_USER_ID, EFFECTIVE_DT, INACTIVE_DT)
VALUES
('2527451', CASE WHEN :new.data_date > 99999 then To_Date(:new.data_Date, 'dddyyyy') ELSE To_Date(:new.data_Date, 'ddyyyy') END, '1', '20190418', '0', sysdate, '1', null, null, null, null);

data_date的示例数据:

612014 3652014 012015

期望的结果:

Mar-02-2014 (3/1/YYYY for leap year), Dec-31-2014 (Dec-30 for leap year), Jan-01-2015.

所以我的问题是,即使使用LPAD方法,在日历年中有9天没有计算(1YYYY - 确切地说是9YYYY)。这些日期我该怎么办?日期是varchar格式,所以我不能使用操作条件语句(即CASE WHEN:new.data_date< = 10000 THEN to_date(lpad(:new.data_Date,7,' 00' ),' DDDYYYY')

1 个答案:

答案 0 :(得分:2)

如何填充左边的数字?

Insert into Submission (RESPONDENT_ID, SUBMISSION_DT, SUBMISSION_TYPE_ID, SUBMISSION_NAME_TX, SUBMISSION_SEQ_NB, CREATE_DT, CREATE_USER_ID, MODIFY_DT, MODIFY_USER_ID, EFFECTIVE_DT, INACTIVE_DT)
    values ('2527451',
            to_date(lpad(:new.data_Date, 7, '0'), 'DDDYYYY'),
           '1', '20190418', '0', sysdate, '1', null, null, null, null
           );

注意:如果表中的值是数字,则不要对其值使用单引号。