Oracle Decode函数以不同的格式生成

mut*_*oss 3 oracle decode

SELECT DECODE (SYSDATE, SYSDATE + 1, NULL, SYSDATE)
  FROM DUAL;


SELECT DECODE (SYSDATE, SYSDATE + 1, TO_DATE (NULL), SYSDATE)
  FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

为什么我从上面的查询中得到不同格式的结果?

我正在使用Oracle数据库10g企业版10.2.0.4.0 - 64bi

Vin*_*rat 6

decode功能结果有第三个参数的数据类型.在第一种情况下,由于未指定任何数据类型NULL,因此使用默认的VARCHAR2.在第二种情况下,明确要求DATE,因此结果是日期.

换句话说,第一个查询与以下内容相同:

SELECT DECODE(SYSDATE, SYSDATE + 1, to_char(NULL), to_char(SYSDATE)) FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

此查询的输出将根据您的NLS_DATE_FORMAT会话参数进行格式化,而第二个查询将返回将根据您的客户端设置显示的日期.