Oracle 检查日期列中是否有空格,如果该列小于sysdate,则将其替换为sysdate

Oracle 检查日期列中是否有空格,如果该列小于sysdate,则将其替换为sysdate,oracle,Oracle,我有一个日期列(计划日期)数据类型为varchar 前任: 3/22/2017 4/28/2017 2017年5月3日 我需要检查空值,如果发现任何空值,将其作为sysdate 所有日期您可以使用to_date()、to_char()函数和case语句的组合。大概是这样的: SELECT CASE when schedule IS NULL THEN to_char(SYSDATE, 'MONTH') when (to_date(schedule, 'MM/DD/YYYY') &

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

  • 我需要检查空值,如果发现任何空值,将其作为sysdate

  • 所有日期您可以使用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;
    

    为我工作!。。。刚刚试过第二部分……非常感谢!!!!选择CASE WHEN to_date('4/17/2020','MM/DD/YYYY')在
    varchar
    列中存储日期(或时间戳)值是一个非常糟糕的开始。@没有名字的马同意它应该是日期或时间戳列。TL;DR off-topic-如果出于某种原因您被迫使用varchar,那么至少尝试在文本YYYY-MM-DD中使用ISO格式,以便您可以对列进行排序。
    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