-Рубрики

 -Музыка

 -Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в Iwinter

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 28.04.2008
Записей:
Комментариев:
Написано: 228


Работа с датами (в Oracle)

Четверг, 20 Августа 2009 г. 10:09 + в цитатник

Вчера "приперло" написать небольшой скриптик изменения поля типа Date. ("обмануть" кассовый модуль для запуска на автомате полной выгрузки на кассы). Все вр гоняем запросы/отчеты, работая только с датой, не захватывая время. А тут вот надо было точно и время указывать. Поэтому и заметочку пишу.

Тип данных DATE применяется в Oracle для хранения даты и времени. Вне зависимости от применяемого пользователем формата, 7 байт поля такого типа содержат след.: 1. Век 2. Год 3. Месяц 4. День 5. Час 6. Минута 7. Секунда. И уж тут извлекай из него что хошь.

Полезные ф-ции TO_DATE(строка [,формат]), TO_CHAR(дата [, формат]) - из строки в дату и из даты в строку, соотв. Не буду расписывать форматы, можно найти в любом хелпе/инете.

Мне понравилось, что к дате можно прибавлять дни, месяцы, годы, часы, минуты, секунды. Считается, что единицей зн-я, прибавляемого к дате, является день. То бишь, чтоб добавить к дате несколько дней/ недель / месяцев (тут лучше ADD_MONTHS() юзать)/ лет, а тж часть дня (часов/ минут/ секунд), нужно просто умножить на соотв.коэффициент, преобразовав все к дням:

SELECT SYSDATE+7 FROM DUAL -- добавили неделю

SELECT TO_CHAR(SYSDATE, 'DD.MM.YYYY HH:MI:SS'), TO_CHAR(SYSDATE + (20/1440), 'DD.MM.YYYY HH:MI:SS')

-- добавили 20 минут (в сутках 1440 мин.). 

 Вот вчера и развлеклась с минутами за считанные секунды ;)  оч удобно. Хорошо, что под рукой есть книженция "Секреты Oracle SQL" от Санжей Мишра и Алана Бьюли. Рекомендую. А уж как она помогает при составлении каверзных запросов!

 

Рубрики:  Работа
Метки:  

Аноним   обратиться по имени Вторник, 29 Сентября 2009 г. 14:13 (ссылка)
Как тебе вот это это
select to_oradate(131465502)
from dual
результат будет 30.01.06
далее прибавим один день
select to_oradate(131465502 + 1)
from dual
результат будет 31.01.06 все впорядке

select to_oradate(131465502 + 2)
from dual

но когда прибавим 2 дня будет ошибко
select to_oradate(131465502 ) + 2 --тут будет все впорядке
from dual
вопрос как прибавить дни в скобках но не за скобками)))
Ответить С цитатой В цитатник    |    Не показывать комментарий
Iwinter   обратиться по имени Четверг, 01 Октября 2009 г. 11:24 (ссылка)
хм, запрос вылетает с ошибкой, не воспринимает to_oradate. Откуда запускаешь, и версия oracle? по-моему, такой стандартной ф-ции нет...
Ответить С цитатой В цитатник
Аноним   обратиться по имени Пятница, 16 Октября 2009 г. 13:02 (ссылка)
Oracle SQL Developer 1.2.0
Вобщем разобрался посему невыходит сначало прибавить день потом перенсти а все дело вот в этом
(DATETIME INTEGER)
RETURN DATE AS MM INTEGER;
YY INTEGER;
TMP INTEGER;
BEGIN YY := DATETIME / 65536; --131465502/65536 = 2006
TMP := MOD(DATETIME,65536); 288
MM := TMP / 256; 7.8 1
TMP := MOD(TMP,256);
RETURN TO_DATE(TO_CHAR(TMP)||'.'||TO_CHAR(MM)||'.'||TO_CHAR(YY),'DD.MM.YYYY');
END;
поиграйся с этой цифрой в той функции 131465729
Ответить С цитатой В цитатник    |    Не показывать комментарий
Аноним   обратиться по имени Вторник, 23 Октября 2012 г. 07:33 (ссылка)
select to_date('01.01.2012','dd.mm.yyyy')+interval '1' minute+interval '1' hour+interval '1' second from dual - так это нужно делать, не магическими цифрами пользоваться
Ответить С цитатой В цитатник    |    Не показывать комментарий
Комментировать К дневнику Страницы: [1] [Новые]
 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку