我有一个日期列(计划日期)数据类型为varchar 例如: 2017/3/22 2017/4/28 5/3/2017
因此上述3条记录应成为sysdates,而我只想捕获月份
2017年3月22日应成为“五月” 2017年4月28日应成为“五月” 2017年5月3日应成为“五月”
谢谢!
答案 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