Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да работим с функции за дата в Oracle sql

В тази публикация се опитвам да обясня много неща  за датата в 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 AM

2) Никога не разчитайте на имплицитни преобразувания на низове в дати или дати в низове. Винаги извършвайте изрично преобразуванията с функциите 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- 81

ADD_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-08

MONTHS_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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Инсталиране на Oracle 12c Enterprise Edition на Windows 7

  2. ЗАДЪРЖАНЕ НА ЛОБ

  3. SQL:Вземете записи, създадени във времеви диапазон за конкретни дати

  4. Как да показвате коментари на колона с операция desc

  5. ORA-12514 TNS:слушателят в момента не знае за услуга, поискана в дескриптора на свързване