проверка столбца даты на наличие пробелов и, если он меньше sysdate, замените его на sysdate - PullRequest
1 голос
/ 12 мая 2019

У меня есть столбец даты (дата графика), тип данных как varchar например: 3/22/2017 4/28/2017 5/3/2 017 * * +1001

  1. Мне нужно проверить наличие нулей и, если они найдены, сделать это как sysdate
  2. Все даты <= sysdate должны быть преобразованы в sysdate </li>

так что 3 вышеупомянутые записи должны стать sysdates, и я просто хочу захватить месяц

3/22/2017 должно стать «май» 28.04.2017 должен стать «майским» 03.05.2017 должно стать «майским»

Спасибо!

1 Ответ

2 голосов
/ 12 мая 2019

Вы можете использовать комбинацию функций 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     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...