今天使用Oracle decode来判断时间,但是结果出来格式是混乱的
我所使用的Oracle版本为:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
SELECT
DECODE (
SYSDATE + 1,
NULL,
NULL,
TO_DATE (
TO_CHAR (SYSDATE + 1, 'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss'
)
)
FROM
dual;
结果如图所示,明明已经转换了格式,却不生效。
结局方案,加入CAST即可
SELECT
DECODE (
SYSDATE + 1,
NULL,
CAST (NULL AS DATE),
TO_DATE (
TO_CHAR (SYSDATE + 1, 'yyyy-mm-dd') || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss'
)
)
FROM
dual;
但是经前辈指点,decode执行效率比较低,最后还是放弃了这个写法,改用case when
SELECT
CASE
WHEN SYSDATE IS NULL THEN
NULL
ELSE
TO_DATE (
TO_CHAR (
SYSDATE + 1,
'yyyy-mm-dd'
) || ' 23:59:59',
'yyyy-mm-dd hh24:mi:ss'
)
END
FROM
dual;