Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как выбрать время из Date?  [new]
Rangil
Member

Откуда: Одесса
Сообщений: 655
extract( minute from(date) ) - не работает,
а
extract( day from(date) ) - запросто

В чем фишка?
20 июн 07, 15:52    [4294684]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать время из Date?  [new]
OraDen
Member

Откуда:
Сообщений: 828
Rangil
В чем фишка?
В доке
20 июн 07, 16:05    [4294820]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать время из Date?  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
SELECT to_char(sysdate, 'hh24:mi:ss')
FROM dual

PS а до 9 EXTRACT вообще не было - и как это люди жили?
20 июн 07, 16:08    [4294847]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать время из Date?  [new]
Rangil
Member

Откуда: Одесса
Сообщений: 655
tru55
SELECT to_char(sysdate, 'hh24:mi:ss')
FROM dual

PS а до 9 EXTRACT вообще не было - и как это люди жили?


Видать вот ТАК и жили.
20 июн 07, 16:12    [4294891]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать время из Date?  [new]
OlleUp
Member

Откуда: Хабаровск
Сообщений: 134
Rangil
extract( minute from(date) ) - не работает,
а
extract( day from(date) ) - запросто

В чем фишка?


Фишка в том что это как бы баг.
обратите внимание на:

select extract(MINUTE from current_timestamp) from dual
-- работает нормально
/
select extract(MINUTE from sysdate) from dual
--не работает
/
select extract(MINUTE from to_date('01.01.2007 20:01:03','DD.MM.YYYY HH24:MI:SS')) from dual
-- не работает
/
select extract(MINUTE from to_timestamp('01.01.2007 20:01:03','DD.MM.YYYY HH24:MI:SS')) from dual
--работает нормально
/

Ну и документация:
Note:
The field you are extracting must be a field of the datetime_value_expr or interval_value_expr. For example, you can extract only YEAR, MONTH, and DAY from a DATE value. Likewise, you can extract TIMEZONE_HOUR and TIMEZONE_MINUTE only from the TIMESTAMP WITH TIME ZONE datatype.


Короче, для извлечения минут тип должен быть - datetime.
Ну а to_date, date, current_date возвращают как бы тип DATE. И ничего, что время там присутствует :) Ну и тем более ничего страшного, что типа DATETIME в оракле нет - есть тип DATE.
А to_timestamp возвращает тип, в котором время подразумевается. Вот и работает.
Дурость конечно - однако вот.

Oracle 9.2.0.1 Win.
20 июн 07, 16:14    [4294905]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать время из Date?  [new]
Rangil
Member

Откуда: Одесса
Сообщений: 655
OlleUp

Дурость конечно - однако вот.



Может это слишком уж чересчур глубокоосмысленное изобретение?
20 июн 07, 16:18    [4294952]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать время из Date?  [new]
Rangil
Member

Откуда: Одесса
Сообщений: 655
Кстати спасибо за развернутый ответ.
20 июн 07, 16:19    [4294966]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать время из Date?  [new]
OraDen
Member

Откуда:
Сообщений: 828
Кроме sysdate еще функция появилась SYSTIMESTAMP :)
20 июн 07, 16:22    [4294996]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать время из Date?  [new]
Rangil
Member

Откуда: Одесса
Сообщений: 655
Из всего выше сказанного слепил следующее

extract(HOUR from to_timestamp(to_char(datetime, 'DD.MM.YYYY HH24:MI:SS')))

Работает :)
20 июн 07, 16:32    [4295068]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать время из Date?  [new]
Elic
Member

Откуда:
Сообщений: 29991
Rangil
слепил. Работает
Ненадолго
20 июн 07, 16:38    [4295117]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать время из Date?  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Rangil
Из всего выше сказанного слепил следующее

extract(HOUR from to_timestamp(to_char(datetime, 'DD.MM.YYYY HH24:MI:SS')))

Работает :)


а так сильно сложнее? :)
SELECT to_number(SUBSTR(to_char(sysdate, 'hh24:mi:ss'), 1, 2))
FROM dual
to_number - только если действительно нужен number
20 июн 07, 16:40    [4295127]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать время из Date?  [new]
1
Guest
tru55

а так сильно сложнее? :)
SELECT to_number(SUBSTR(to_char(sysdate, 'hh24:mi:ss'), 1, 2))
FROM dual
to_number - только если действительно нужен number


а SUBSTR-то зачем?
SELECT to_char(sysdate, 'hh24')
FROM dual
20 июн 07, 16:51    [4295213]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать время из Date?  [new]
Rangil
Member

Откуда: Одесса
Сообщений: 655
Elic
Rangil
слепил. Работает
Ненадолго


Я тут опять из всего выше сказанного перелепил и получилось

select to_number( to_char(sysdate, 'HH24') ) from dual

Тоже работает и надеюсь надолго, т.к. дальше придется поле DATE переделывать на timestamp последствия чего я по-просту не знаю.
21 июн 07, 12:28    [4298521]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить