В тази публикация се опитвам да обясня много неща за датата в oracle като функции за дата на oracle sql, формат за дата на oracle sql, сравнение на датата на oracle sql, разлика в датата на oracle в години, разлика в датата на oracle в дни, разлика в датата на oracle в месеци
Oracle предостави типове клеймо за дата и час за съхраняване на информацията за дата и час в базата данни на Oracle.
Тип данни за дата
DATE е типът данни на Oracle, с който всички сме запознати, когато мислим за представяне на стойности за дата и час. Той има способността да съхранява месец, ден,
година, век, часове, минути и секунди. Проблемът с типа данни DATE е неговата детайлност при опит да се определи интервал от време между две събития, когато събитията се случват в рамките на една секунда едно от друго. Този проблем е решен с типа данни TIMESTAMP
Часово клеймо
Oracle разшири типа данни DATE и ни даде типа данни TIMESTAMP, който съхранява цялата информация, която типът данни DATE съхранява, но също така включва частични секунди. Ако искате да конвертирате тип данни DATE във формат на тип данни TIMESTAMP, можете да използвате функцията CAST
SQL> ИЗБЕРЕТЕ CAST(last_login_date КАТО TIMESTAMP) "Дата" ОТ потребители;Дата------------------------------ ----------------------20-APR-16 01.55.14.000000 PM21-JUN-16 14.16.36.000000 AM21-JUL-16 10.16.36.000000 AM21-SEP- 16 11.16.36.000000 AM21-DEC-16 11.16.36.000000 AM
За да получите системната дата и час, върнати в тип данни TIMESTAMP, можете да използвате функцията SYSTIMESTAMP, като например:
SQL> ИЗБЕРЕТЕ SYSTIMESTAMP ОТ DUAL;SYSTIMESTAMP--------------------------------------- ------------------------------------01-SEP-19 01.02.17.158913 PM -04:00предварително>Някои важни точки
1) И двата типа DATE и TIMESTAMP винаги съдържат компонент за дата и час. Точно в полунощ часът е 00:00:00.
SELECT TO_CHAR(SYSDATE, 'MM/DD/YYYY HH:MI:SS AM') date_with_time,TRUNC(SYSDATE) днес,TO_CHAR(TRUNC(SYSDATE), 'MM/DD/YYYY HH:MI:SS AM' ) date_with_time_midnightFROM dual 2 3 4;DATE_WITH_TIME ДНЕС DATE_WITH_TIME_MIDNIGHT--------------------- --------- --------- ------------10/27/2016 11:01:00 AM 27-OCT-16 10/27/2016 12:00:00 AM2) Никога не разчитайте на имплицитни преобразувания на низове в дати или дати в низове. Винаги извършвайте изрично преобразуванията с функциите TO_CHAR, TO_DATE и TO_TIMESTAMP или използвайте литерали ANSI DATE или TIMESTAMP.
3) Когато правите сравнения на дата или времеви печат, винаги имайте предвид влиянието на компонента за време. Ако искате да изключите компонента за време от сравнението, използвайте TRUNC или КРЪГЛА функции, за да го премахнете от двете страни на сравнението.изберете * от fnd_table, където trunc(creation_date)4) Можете да покажете необходимия формат на датата, като използвате nls_date_format на ниво сесия
Променете формата на датата в oracle с помощта на nls_date_format
ALTER SESSION SET NLS_DATE_FORMAT ='YYYY MM DD';изберете системна дата от двойна;ALTER SESSION SET NLS_DATE_FORMAT ='HH24:MI:SS';изберете системна дата от двойна;променете набора на сесия nls_date_monat- hy2 =yy ' mi:ss';изберете системна дата от двойна;5) Ето едно добро обобщение на форматите за време, които можем да използваме
Елемент Описание Елементи за формат на дата SCC или CC Век; S префикси BC дата с – ГГГГ или СИГГГ Година; S префикси BC дата с – ГГГ или ГГ или Г Последните 3, 2 или 1 цифра на годината Y,YYY Година със запетая в тази позиция IYYY, IYY, IY, I 4, 3, 2 или 1 цифрена година въз основа на стандарта ISO SYEAR или YEAR Изписана година; S префикси BC дата с – пр.н.е. или н.е. BC/AD индикатор пр.н.е. или след Христа BC/AC индикатор с точки В Тримесечие на годината ММ Месец, двуцифрена стойност МЕСЕЦ Име на месеца, допълнено с празни места до дължина от 9 знака ПОН Име на месеца, трибуквено съкращение RM Месец с римско число WW или W Седмица от годината или месеца DDD или DD или D Ден от годината, месец или седмица ДЕН Име на деня, допълнено с празни места до дължина от 9 знака DY Име на деня; 3 буквено съкращение J юлиански ден; броят на дните от 31 декември 4713 г. пр. н. е. Елементи на времевия формат AM или PM Меридиан индикатор А.М. или P.M. Меридиан индикатор с периоди HH или HH12 или HH24 Час от деня или час (1-12) или час (0-23) MI Минута (0-59) SS Втори (0-59) SSSSS Секунди след полунощ (0-86399) Наставки TH Пореден номер (т.е. DDTH за 5-ти) SP Изписан номер (т.е. DDSP за FIVE) SPTH или THSP Изписани редни числа (т.е. DDSPTH за FIFTH) Други елементи за форматиране / , . Пунктуацията се възпроизвежда в резултата „от” Низът в кавички се възпроизвежда в резултата функции за дата на оракул
Научихме за типа данни за дата и час в предишния раздел. Сега ще видим подробно важните функции за дата на оракула и как можем да ги използваме
ADD_MONTHS
Функция за дата Описание ADD_MONTHS (дата, n) Връща стойност за дата след добавяне на „n“ месеца към датата „x“. изберете ADD_MONTHS ('16-Sep-81', 3) от двойно----------------------------16-Dec- 81ADD_MONTHS винаги измества датата с цели месеци. Можете да предоставите дробна стойност за параметъра month_shift, но ADD_MONTHS винаги ще закръгли надолу до цялото число, най-близкото до нулата, както е показано в тези
примери:Така че
изберете ADD_MONTHS ('28-FEB-2005', 1.5) от двойно-------------------------------- -----------31 март 2005 г.Можем да използваме и отрицателни стойности
изберете ADD_MONTHS ('28-FEB-2005', -1) от двойни---------------------------------------31 -Януари 2005 г.Последен_ден
Функция за дата Описание LAST_DAY (x) Използва се за определяне на броя на оставащите дни в месеца от посочената дата „x“. Функцията LAST_DAY връща датата на последния ден от месеца за дадена дата. Тази функция е полезна, защото броят на дните в месеца варира през цялата година.
изберете LAST_DAY ('01-Jun-16') от двойно---------------------------------- ------------------30 юни 2016 г.Следващия_ден
Функция за дата Описание СЛЕДВАЩ_ДЕН (x, седмица_ден) Връща следващата дата от „week_day“ на или след датата „x“. NEXT_DAY връща датата на първия делничен ден, посочен по ден, който е по-късен от датата. Типът на връщането винаги е DATE, независимо от типа данни на датата. Денят на аргумента трябва да е ден от седмицата на езика на датата на вашата сесия, или пълното име, или съкращението
изберете СЛЕДВАЩ_ДЕН ('01-юни-08', 'сряда') от двойно------------------------------ -------------04-JUN-08MONTHS_BETWEEN
Функция за дата Описание МЕСЕЦА_МЕСЕЦА (x1, x2) Връща броя на месеците между датите x1 и x2. Функцията MONTHS_BETWEEN изчислява броя на месеците между две дати и връща тази разлика като число
Правилата за изчисляване са
1)Ако дата 1 идва след дата 2, тогава MONTHS_BETWEEN връща положително число.
2) Ако дата 1 идва преди дата 2, тогава MONTHS_BETWEEN връща отрицателно число.
3) Ако датата 1 и датата 2 попадат в последния ден от съответните им месеци, тогава MONTHS_BETWEEN връща цяло число (без дробен компонент).
4)Ако дата 1 и дата 2 са в различни месеци и поне една от датите не е последния ден в месеца, MONTHS_BETWEEN връща дробно число. Дробният компонент се изчислява на база 31 дни и също така отчита всички разлики във времевия компонент на дата 1 и дата 2.Примери
изберете MONTHS_BETWEEN ('29-FEB-2016', '31-MAR-20') от двойно-------------------------- -------------------------------------------------- -----1изберете MONTHS_BETWEEN ('31-МАР-1995', '28-FEB-1994') от двойно--------------------- -------------------------------------------------- -----13изберете MONTHS_BETWEEN ('31-JAN-2006', '10-MAR-2006') от двойно--------------------- -------------------------------------------------- ---1.3225806SELECT MONTHS_BETWEEN(TO_DATE('02-02-1995','MM-DD-YYYY'),TO_DATE('01-01-1995','MM-DD-YYYY') ) "Месеци" ОТ DUAL;Месеци----------1,03225806Важен момент, който трябва да запомните
MONTHS_BETWEEN изчислява дробния компонент на броя на месеците, като приема, че
всеки месец има 31 дни. Следователно всеки допълнителен ден за цял месец се брои за 1/31 от месеца и:
1 разделено на 31 =.032258065Кръгла
Функция за дата Описание КРЪГЛО (x, формат_дата) Връща датата „x“, закръглена до най-близкия век, година, месец, дата, час, минута или секунда, както е посочено от „date_format“. Функцията ROUND закръглява стойността на датата до най-близката дата, както е посочено от маска на формат. Това е точно като стандартната цифрова функция ROUND, която закръглява число до най-близкия номер с определена точност, с изключение на това, че работи с дати
Примери
Изберете ROUND (TO_DATE ('12-MAR-2016'), 'MONTH') от двойно;01-MAR-2016Изберете ROUND (TO_DATE ('17-MAR-2016'), 'MONTH') от dual;01 -APR-2016 изберете КРЪГ (ДО_ДАТА ('01-MAR-2007'), 'YYYY') от двойно;01-ЯНВ-2007 изберете КРЪГЛА (ДО_ДАТА ('01-SEP-2007'), 'ГОДИНА') от двойно;01 -ЯН-2008Дънник
Функция за дата Описание TRUNC (x, формат_дата) Връща датата „x“, по-малка или равна на най-близкия век, година, месец, дата, час, минута или секунда, както е посочено от „date_format“. Примери
Изберете TRUNC (TO_DATE ('12-MAR-2016'), 'MONTH') от двойно;01-MAR-2016 Изберете TRUNC (TO_DATE ('17-MAR-2016'), 'MONTH') от двойно; 01-MAR-2016 изберете TRUNC (TO_DATE ('01-MAR-2007'), 'YYYY') от двойно; 01-JAN-2007 изберете TRUNC (TO_DATE ('01-SEP-2007'), 'YEAR') от двойно;01-ЯНВ-2007Аритметика с Oracle дата
Можем да извършваме много аритметични операции върху типа данни за дата на оракул. Можем да добавяме или изваждаме число към или от дата за получена стойност за дата. можем да извадим две дати, за да намерим броя на дните между тези дати. добавяме часове към дата, като разделим броя на часовете на 24.
Примери за събиране и изваждане
SQL> изберете sysdate, sysdate+1/24, sysdate +1/1440, sysdate + 1/86400 от dual;SYSDATE SYSDATE+1/24 SYSDATE+1 -4 - -------------- -------------------- ---------------- --------------------01 юли 2016 06:32:12 01 юли 2016 07:32:12 01 юли 2016 06 :33:12 01.07.2016 г. 06:32:13Други начини, по които можем да го използваме, са
Описание Израз за дата Сега Системна дата Утре/на следващия ден Sysdate +1 Преди седем дни SYSDATE -7 След един час SYSDATE + 1/24 Три часа от сега SYSDATE + 3/24 или SYSDATE + 1/8 Половин час от сега SYSDATE + 1/48 10 минути от сега SYSDATE + 10/1440 30 секунди от сега SYSDATE + 30/86400 Аритметична операция на разликата в датата, за да се намери до броя дни между тях
Можем да извадим две дати, за да намерим разликата в дните между датите
Ако частта от времето е една и съща, то винаги ще има цяло числоSELECT TO_DATE('25-MAR-2016 11:00:00 AM', 'DD-MON-YYYY HH:MI:SS AM')- TO_DATE(' 19-МАР-2016 11:00:00 AM', 'DD-MON-YYYY HH:MI:SS AM') diff_in_daysFROM двойно;DIFF_IN_DAYS----------6Ако частта от времето не е същата, тогава винаги ще има дробни компонентиSELECT TO_DATE('25-МАР-2016 10:00:00 AM', 'YYYYMMDD HH:MI:SS AM')- TO_DATE('19-MAR-2016 11:00:00 AM', 'YYYYMMDD HH:MI:SS AM') diff_in_daysFROM dual;DIFF_IN_DAYS----------5.95833333SQL> SELECT TO_DATE('25-МАР-2016 11:00:00 AM', 'HHYYMIYMMDD SS AM')- TO_DATE('19-MAR-2016 10:00:00 AM', 'YYYYMMDD HH:MI:SS AM') diff_in_daysFROM двойно;DIFF_IN_DAYS----------6.04166666Можем да намерим разликата в датата на оракула в месеци с помощта на заявката
SELECT MONTHS_BETWEEN(TO_DATE('02-02-1995','MM-DD-YYYY'),TO_DATE('01-01-1995','MM-DD-YYYY') ) "Разлика_в_месеци", (TO_DATE ('02-02-1995','MM-DD-YYYY')-TO_DATE('01-01-1995','MM-DD-YYYY') diff_in_daysFROM DUAL;Diff_in_Months diff_in_days--------- -------------------------------1.03225806 32Можем също да намерим разликата в датата на оракула в години с помощта на заявката
SELECT (TO_DATE('20130525', 'YYYYMMDD') - TO_DATE('20100101', 'ГГГГММДД')) diff_in_days , MONTHS_BETWEEN(TO_DATE('20130525', DDDD', 'YYYY0MM'), TOYYY0MM ')) Diff_in_months,TRUNC(MONTHS_BETWEEN(TO_DATE('20130525', 'YYYYMMDD'), TO_DATE('20100101', 'YYYYMMDD'))) Diff_in_months_no_fraction,TRUNC5MONTH(TRUNCMONTTH(TRUNCMONT2_10BETC(TRUNCMONT_20BY) , TO_DATE('20100101', 'ГГГГММДД'))) / 12) Diff_in_years_no_fraction,MOD(TRUNC(MONTHS_BETWEEN(TO_DATE('20130525', 'YYYYMMDD'), TO_DATE('1'1000) TO_DATE('1'201002)YDD ) Diff_in_years_fraction_in_monthsFROM dual;DIFF_IN_DAYS DIFF_IN_MONTHS DIFF_IN_MONTHS_NO_FRACTION DIFF_IN_YEAR_NO_FRACTION DIFF_IN_YEARS_FRACTION_IN_MONTHS____________________________________________________________________________________1240 40.7741 40 3 4
Надявам се да ви хареса публикацията за типа данни на Oracle. Опитах се да обясня различни неща като функции за дата на oracle, формат на датата на oracle sql, сравнение на датата на oracle sql, разлика в датата на oracle в години, разлика в датата на oracle в дни, разлика в датата на oracle в месеци. Това не е пълно ръководство, но се опитах да представя много полезна информация за разработчика на oracle sqlСродни статии
как да пишем sql заявки
Урок за Oracle sql :Основно изявление на Sql
Урок за Oracle sql :Ограничаване на набора от данни
Функции от един ред в sql
Обработка на Oracle sql декодиране
Изтегляне Разработчик на Oracle SQL
https://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_commands_1029.htm#OLADM780