Select sysdate from dual

У меня проблемы со временем в моем выборе. Время в БД отличается от системного времени, поэтому я предполагаю, что мне нужно использовать 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. С физической точки зрения это дробное число, целая часть которого хранит количество дней с некоторой базовой даты, а дробная — время. Это позволяет совершать над датами арифметические операции — сложение и вычитание.

Это одна из самых часто употребляемых функций, она возвращает те­кущую дату и время по часам сервера. Пример:

Читайте также:  Amd radeon hd 7770 cape verde

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,

Первый день месяца

Читайте также:  Driverpack solution для windows 10 64 bit

или ММ

Тот же день недели, что день текущего года

и первый

Тот же день недели, что день текущего месяца

и первый

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

Читайте также:  Alcatel one touch go play lte

ROUND (число) функция будет работать только с number типа данных. Он не будет работать с типом date .
Если ваш t.something1 данных столбца t.something1 является датой, чем вы не можете использовать функцию round() (вы можете напрямую сравнивать дату с датой), если это не так и есть число, чем вы будете использовать round(), и вам нужно будет преобразовать ваш sysdate в число и сравнение.

По моему пониманию вы делаете что-то вроде ниже:

Rate this post

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *