#sql #oracle
#sql #Oracle
Вопрос:
Запрос:
SELECT INTERVAL '300' month,
INTERVAL '54-2' year to month,
INTERVAL ' 11:12:10.1234567' hour to second
FROM DUAL;
Результатом приведенного выше запроса является:
25-00, 54-02, 00 11:12:10.1234567
Может кто-нибудь, пожалуйста, объяснить мне, как этот запрос выдает этот результат, с объяснением об интервальной функции?
Комментарии:
1. Смотрите: askanantha.blogspot.com/2007/08 /…
Ответ №1:
INTERVAL
это не функция, это ключевое слово, которое вводит литерал интервала и таким образом обозначает тип данных. Аналогично тому, что делают литералы DATE '2011-05-04'
или TIMESTAMP '2011-05-04 17:18:19'
.
Подробности об интервальных литералах
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements003.htm#SQLRF00221
http://docs.oracle.com/cd/E11882_01/server.112/e41084/expressions009.htm#SQLRF52084
Подробные сведения об типе данных интервала:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#i128552
Ответ №2:
Интервал — это функция, которая используется для вычитания или добавления (дней, лет, месяцев, часов, минут и секунд) к заданной дате. интервал ‘300’ месяц: 25-0 Причина: 300/12 (месяцы) дает вам частное как 25, а остаток как 0, поэтому результат будет 25-0
интервал ’54-2′ от года к месяцу: 54-2 Причина: Поскольку вы не указали какую-либо дату, она указана как есть. если вы используете select sysdate интервал ’54-2′ от года к месяцу из dual; вывод будет: 1-12-2066
sydate: 1-10-2012 таким образом, добавление 54 к 12 = 66 и добавление 2 месяцев к октябрю, который будет декабрем.
То же самое и с последним вариантом.