Oracle 检查日期列中是否有空格,如果该列小于sysdate,则将其替换为sysdate
我有一个日期列(计划日期)数据类型为varchar 前任: 3/22/2017 4/28/2017 2017年5月3日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') &
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