Функция декодирования в базе данных Oracle - PullRequest
10 голосов
/ 20 февраля 2012

Может кто-нибудь объяснить, пожалуйста, SQL-оператор ниже из базы данных Oracle:

select decode(TRIM(to_char(SYSDATE,'Day')),'Monday','3','1') from dual

Ответы [ 3 ]

27 голосов
/ 20 февраля 2012

Прежде всего, давайте начнем с to_char. to_char(SYSDATE,'Day') даст вам день недели, который сегодня. to_char позволяет преобразовать дату (в данном случае сегодняшнюю дату, так как вы указали sysdate) в строку определенного формата. Посмотрите здесь другие примеры форматов даты, которые вы можете использовать:

http://www.techonthenet.com/oracle/functions/to_char.php

trim удаляет начальные и конечные пробелы.

Теперь для decode. Вы можете думать о decode как о выражении if else. Взгляните на:

http://www.techonthenet.com/oracle/functions/decode.php

В вашем конкретном примере вы можете прочитать это утверждение так: если сегодня понедельник, возвращаем 3, а возвращаем 1. 1. 1020 *

decode также позволяет вам делать более сложные вещи:

select decode(TRIM(to_char(SYSDATE,'Day')),'Monday','3','Tuesday',5,'1') 
from dual

Это будет звучать так: если сегодня возвращение в понедельник 3, иначе, если сегодня возвращение во вторник 5, иначе возвращение 1

14 голосов
/ 20 февраля 2012

Это вернет 3, если в данный момент это понедельник (а локаль такова, что день отображается как «понедельник»), и 1 в противном случае.

DECODE(a, b,c, d,e, f,g, ..., h) будет сравнивать aдо b, d, f и т. д. по очереди.Если a равно b, то DECODE возвращает c;если a равно d, то DECODE возвращает e;и так далее.Если a не является ни одним из них, то DECODE возвращает h.(h является необязательным; возвращаемое значение по умолчанию, если h не задано, равно NULL.)

1 голос
/ 15 апреля 2019

Ниже приведено объяснение по частям:

SYSDATE

возвращает дату сервера, такую ​​как 15-APR-19 и формат, основанный на локальном

to_char (SYSDATE, 'День')

преобразуется в строку и возвращает день недели, например, понедельник для даты 15-апреля 19

TRIM (to_char (Sysdate, 'День'))

удаляет пустые места до и после

Функция декодирования аналогична операторам if else и, следовательно, упрощает код. Для текущего примера, если мы пишем в SQL, то это должно быть так:

CASE 
  WHEN TRIM(to_char(SYSDATE,'Day')) = 'Monday'  THEN '3'
  WHEN TRIM(to_char(SYSDATE,'Day')) = 'Tuesday' THEN '4'
  ELSE '1' 
END

Полную справку см. https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions040.htm

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