检查日期列是否为空白,如果它小于sysdate,则将其替换为sysdate

时间:2019-05-12 03:05:10

标签: oracle

我有一个日期列(计划日期)数据类型为varchar 例如: 2017/3/22 2017/4/28 5/3/2017

  1. 我需要检查是否为空,如果找到任何空值,则将其设置为sysdate
  2. 所有日期<= sysdate应该转换为sysdate

因此上述3条记录应成为sysdates,而我只想捕获月份

2017年3月22日应成为“五月” 2017年4月28日应成为“五月” 2017年5月3日应成为“五月”

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以结合使用to_date(),to_char()函数和case语句。像这样:

SELECT CASE when schedule IS NULL THEN to_char(SYSDATE, 'MONTH') 
       when (to_date(schedule, 'MM/DD/YYYY') < SYSDATE) THEN to_char(SYSDATE, 'MONTH')
       else to_char(to_date(schedule, 'MM/DD/YYYY'), 'MONTH')
  END AS SCHEDULE
FROM my_table;

测试:

CREATE TABLE MY_TABLE (SCHEDULE VARCHAR(10));

INSERT INTO MY_TABLE (SCHEDULE) VALUES ('3/22/2017');
INSERT INTO MY_TABLE (SCHEDULE) VALUES ('4/28/2017');
INSERT INTO MY_TABLE (SCHEDULE) VALUES ('5/3/2017');
INSERT INTO MY_TABLE (SCHEDULE) VALUES (NULL);  -- test for null record
INSERT INTO MY_TABLE (SCHEDULE) VALUES ('6/1/2019');  -- test for future record (current May 2019)

COMMIT;

SELECT SCHEDULE as ORIGINAL_VALUE, CASE 
   when schedule IS NULL THEN to_char(SYSDATE, 'MONTH') 
   when (to_date(schedule, 'MM/DD/YYYY') < SYSDATE) THEN to_char(SYSDATE, 'MONTH')
   else to_char(to_date(schedule, 'MM/DD/YYYY'), 'MONTH')
  END as SCHEDULE_OUTPUT
 FROM my_table;

DROP TABLE MY_TABLE;

结果:

ORIGINAL_VALUE  SCHEDULE_OUTPUT
3/22/2017   MAY      
4/28/2017   MAY      
5/3/2017    MAY      
            MAY      
6/1/2019    JUNE