作为我项目的一部分,我需要在oracle表的第三列中显示两列的最新日期。如果日期相同,则应根据时间显示最新日期。请帮我。提前谢谢。
E.g.1:
col1 col2 col3
12-FEB-17 03:24:23 15-FEB-17 08:12:52 15-FEB-17 08:12:52
它应该在col3中显示col2数据,因为它比col1最近3天。
E.g.2:
col1 col2 col3
02-FEB-17 03:01:57 02-FEB-17 03:01:59 02-FEB-17 03:01:59
它应该在col3中显示col2数据,因为它比col1最近2秒。
答案 0 :(得分:1)
您只需使用GREATEST()函数即可。例如:
with test as
( select to_date( '12-FEB-2017 03:24:23','DD-MON-YYYY HH24:MI:SS' ) col1,
to_date( '15-FEB-2017 08:12:52','DD-MON-YYYY HH24:MI:SS' ) col2 from dual union all
select to_date( '02-FEB-2017 03:01:57','DD-MON-YYYY HH24:MI:SS' ) ,
to_date( '02-FEB-2017 03:01:59','DD-MON-YYYY HH24:MI:SS' ) from dual
)
select col1, col2, greatest( col1, col2 ) col3
from test
COL1 COL2 COL3
-------------------- -------------------- --------------------
12-FEB-2017 03:24:23 15-FEB-2017 08:12:52 15-FEB-2017 08:12:52
02-FEB-2017 03:01:57 02-FEB-2017 03:01:59 02-FEB-2017 03:01:59
答案 1 :(得分:0)
使用import {
makeDOMDriver,
h1,
a
} from '@cycle/dom';
,但使用greatest
。如果没有NVL,如果您有NVL
s,那么null
将成为null
的输出
greatest
答案 2 :(得分:0)
我真的不喜欢使用编造日期,因为两者都是空的怎么办?你会得到1901-01-01。更好的是,使用COALESCE返回非空值:
WITH your_table
AS (SELECT 'COL1 Greater' test, SYSDATE col1, SYSDATE - 10 col2
FROM DUAL
UNION ALL
SELECT 'COL2 Greater', SYSDATE col1, SYSDATE + 10 col2
FROM DUAL
UNION ALL
SELECT 'COL1 null', NULL, SYSDATE col2
FROM DUAL
UNION ALL
SELECT 'Both null', NULL, NULL
FROM DUAL)
SELECT test
, TO_CHAR (col1, 'YYYY.MM.DD') col1
, TO_CHAR (col2, 'YYYY.MM.DD') col2
, TO_CHAR (GREATEST (COALESCE (col1, col2), COALESCE (col2, col1)), 'YYYY.MM.DD') AS col3
FROM your_table;
TEST COL1 COL2 COL3
------------ ---------- ---------- ----------
COL1 Greater 2017.03.01 2017.02.19 2017.03.01
COL2 Greater 2017.03.01 2017.03.11 2017.03.11
COL1 null 2017.03.01 2017.03.01
Both null