ДАТА в НОМЕР / преобразование псевдо-числа - PullRequest
2 голосов
/ 13 октября 2019

К моему собственному удивлению, я не понимаю, как это работает:

SELECT NVL2 (null, SYSDATE - (SYSDATE - 1), SYSDATE)
  FROM dual;

Как и почему Oracle успешно преобразует DATE в псевдо-число (Typ=14)? Я прочитал NVL2, Numeric Precedence и Implicit Data Conversion документацию, но до сих пор не знаю, как это работает. В таблице неявного преобразования типов --.

1 Ответ

2 голосов
/ 13 октября 2019

Это запрос:

SELECT NVL2 (null, SYSDATE - (SYSDATE - 1), SYSDATE) result from dual;

NVL2 (из документации ):

  • Если expr1 не равно нулю, то NVL2 возвращает expr2.
  • Если expr1 равно нулю, то NVL2 возвращает expr3. >> Ваш запрос вернет EXPR3

Далее:

  • , если expr2 является числовым, то Oracle определяет, какой аргумент имеет наивысший числовой приоритет, неявно преобразуетдругой аргумент этого типа данных и возвращает этот тип данных.

Поскольку expr2 действительно является числовым (результат равен 1);вам даже не нужна база данных, в ней говорится, что

sysdate - (sysdate - 1) = sysdate - sysdate + 1 = 1

, тогда expr3 также неявно преобразуется в число. sysdate, являющаяся функцией, возвращающей date тип данных, преобразуется в юлианскую дату.

SQL> SELECT NVL2 (null, SYSDATE - (SYSDATE - 1), SYSDATE) result from dual;

    RESULT
----------
2458770,44

SQL> SELECT to_char(sysdate, 'J') result from dual;

RESULT
-------
2458770

Имеет смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...