• Авторизация


Работа с датами (в Oracle) 20-08-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" от Санжей Мишра и Алана Бьюли. Рекомендую. А уж как она помогает при составлении каверзных запросов!

 

вверх^ к полной версии понравилось! в evernote
Комментарии (5):
29-09-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-10-2009-11:24 удалить
хм, запрос вылетает с ошибкой, не воспринимает to_oradate. Откуда запускаешь, и версия oracle? по-моему, такой стандартной ф-ции нет...
16-10-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-10-2012-07:33 удалить
select to_date('01.01.2012','dd.mm.yyyy')+interval '1' minute+interval '1' hour+interval '1' second from dual - так это нужно делать, не магическими цифрами пользоваться


Комментарии (5): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Работа с датами (в Oracle) | Iwinter - Дневник Iwinter | Лента друзей Iwinter / Полная версия Добавить в друзья Страницы: раньше»