У меня проблемы со временем в моем выборе. Время в БД отличается от системного времени, поэтому я предполагаю, что мне нужно использовать SELECT SYSDATE FROM DUAL но он не работает в другом select. Я использую PL/SQL Developer.
Я также пытался объявить новую переменную, но всегда получаю сообщение об ошибке.
Вы должны использовать SELECT SYSDATE FROM DUAL чтобы получить SYSDATE только если у вас нет таблицы для выбора. Это связано с тем, что SELECT без FROM недействителен с Oracle, поэтому, когда вы хотите использовать функцию SQL, и у вас нет таблицы, вы должны использовать DUAL , которая представляет собой специальную DUMMY таблицу с одним столбцом (с именем DUMMY ), Единственная строка имеет значение X
ROUND (число) функция будет работать только с number типа данных. Он не будет работать с типом date . Если ваш t.something1 данных столбца t.something1 является датой, чем вы не можете использовать функцию round() (вы можете напрямую сравнивать дату с датой), если это не так и есть число, чем вы будете использовать round(), и вам нужно будет преобразовать ваш sysdate в число и сравнение.
По моему пониманию вы делаете что-то вроде ниже:
В данном разделе речь пойдет о функциях работы с датой/временем и функциями преобразования типов для даты. Для хранения даты и времени в Oracle предусмотрен специальный тип DATE. С физической точки зрения это дробное число, целая часть которого хранит количество дней с некоторой базовой даты, а дробная — время. Это позволяет совершать над датами арифметические операции — сложение и вычитание.
Это одна из самых часто употребляемых функций, она возвращает текущую дату и время по часам сервера. Пример:
SELECT SYSDATE
FROM dual
SYSDATE
26.12.2007 16:24:43
Функция ADD_MONTHS(d, x)
Возвращает дату, полученную в результате прибавления к дате d одного или нескольких месяцев. Количество месяцев задается параметров х, причем х может быть отрицательным — в этом случае указанное количество месяцев вычитается из заданной даты.
SELECT SYSDATE d,
ADD_MONTHS(SYSDATE, 3) d1, ADD_MONTHS(SYSDATE, -3) d2
FROM dual
26.12.2007 16:24:43
26.03.2008 16:24:43
26.09.2007 16:24:43
Функция LAST _DAY(d)
Возвращает последнее число месяца, указанного в дате d. Пример:
26.12.2007 16:24:43
31.12.2008 16:24:43
Данная функция очень удобна для определения количества дней в заданном месяце, например:
26.12.2007 16:24:43
Функция MONTHS_BETWEEN(dl, d2)
Функция MONTH_BETWEEN возвращает количество месяцев между двумя датами dl и d2 с учетом знака как dl-d2, возвращаемое число является дробным.
SELECT MONTHS_BETWEEN(‘2.09.2006’, ‘2.05.2006’) d1,
M0NTHS_BETWEEN(‘12.09.2006’, ‘2.05.2006’) d2,
M0NTHS_BETWEEN(‘2.05.2006’, ‘12.09.2006’) d3
FROM dual
4,32258064516129
-4,32258064516129
Функция TRUN С (d[,mask ])
Производит усечение указанной даты в соответствии с маской. Если маска не указана, то усечение производится до даты (время отбрасывается).
26.09.2006 16:45:26
26.09.2006
Рассмотрим типовые примеры — усечение даты до часов, дней, месяца и года. Форматная маска по умолчанию равна «DD»
D3 D4 D5
26.09.2006 16:49:21
26.09.2006 16:00:00
26.09.2006 01.09.2006 01.01.2006
Функция ROUND аналогична TRUNC, но вместо усечения она производит округление. Форматная маска по умолчанию равна «DD». Пример:
D2 D3
D4 D5
26.09.2006 16:50:50
27.09.2006 26.09.2006 17:00:00
27.09.2006 01.10.2006
Форматные маски, допустимые для функций TRUNC и ROUND
Рассмотрим подробнее форматные маски и особенности их применения:
Маска
Назначение
Первый день столетия
YEAR, или YYYY,
Первый день года
или YY, или Y
Первый день квартала
MONTH, или MON,
Первый день месяца
или ММ
Тот же день недели, что день текущего года
и первый
Тот же день недели, что день текущего месяца
и первый
DDD или DD
DAY, или DY, или D
Первый день недели
НН, или НН12, или
Минута
Функция TO_DATE(str[,mask [,nls_lang]])
Функция ТО_DATE преобразует строку str в дату. Преобразование ведется по маске mask, если она указана. Если маска не указана, то берется маска по умолчанию. В случае указания маски можно указать еще один параметр — язык, используемый при форматировании названий месяцев и дней. В случае ошибки анализа строки str в соответствии с заданной
маской возникает исключительная ситуация. Наиболее распространенная ошибка «ORA-01830: шаблон формата даты завершается перед преобразованием всей строки ввода». Кроме того, нередко встречается ошибка «ORA-01821: формат даты не распознан» — она возникает при указании недопустимой форматной маски. Пример:
SELECT T0_DATE(‘12.09.2006’) d
FROM dual
Преобразует дату d в символьную строку в соответствии с заданной маской. В случае указания недопустимой маски возникает исключительная ситуация «ORA-01821: формат даты не распознан». Пример:
SELECT SYSDATE d1,
TOLCHAR(SYSDATE, ‘DD.MM.YY HH24:MI’) d2
FROM dual
© 2020 Научная библиотека
Копирование информации со страницы разрешается только с указанием ссылки на данный сайт
-2 astrak [2014-02-25 15:35:00]
У меня проблемы со временем в моем выборе. Время в БД отличается от системного времени, поэтому я предполагаю, что мне нужно использовать SELECT SYSDATE FROM DUAL но он не работает в другом select. Я использую PL/SQL Developer.
Я также пытался объявить новую переменную, но всегда получаю сообщение об ошибке.
3 ответа
4 Teetoo [2014-02-25 15:45:00]
Вы должны использовать SELECT SYSDATE FROM DUAL чтобы получить SYSDATE только если у вас нет таблицы для выбора. Это связано с тем, что SELECT без FROM недействителен с Oracle, поэтому, когда вы хотите использовать функцию SQL, и у вас нет таблицы, вы должны использовать DUAL , которая представляет собой специальную DUMMY таблицу с одним столбцом (с именем DUMMY ), Единственная строка имеет значение X
ROUND (число) функция будет работать только с number типа данных. Он не будет работать с типом date .
Если ваш t.something1 данных столбца t.something1 является датой, чем вы не можете использовать функцию round() (вы можете напрямую сравнивать дату с датой), если это не так и есть число, чем вы будете использовать round(), и вам нужно будет преобразовать ваш sysdate в число и сравнение.
По моему пониманию вы делаете что-то вроде ниже: