ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 01.10.2024

Просмотров: 160

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Типи даних дати і часу

Існують наступні типи даних дати і часу: DATETIME, DATE, TIMESTAMP, TIME і YEAR. Кожний з них має інтервал допустимих значень, а також значення "нуль", яке використовується, коли користувач вводить дійсно неприпустиме значення. Відзначимо, що MySQL дозволяє зберігати деякі не цілком достовірні значення дати, наприклад 1999-11-31. Причина в тому, що управління перевіркою дати входить в обов'язку конкретного додатку, а не SQL-серверів. Для прискорення перевірки правильності дати MySQL тільки перевіряє, чи знаходиться місяць в інтервалі 0-12 і день в інтервалі 0-31. Дані інтервали починаються з 0, це зроблено для того, щоб забезпечити для MySQL можливість зберігати в стовпцях DATE або DATETIME дати, в яких день або місяць рівний нулю. Ця можливість особливо корисна для додатків, які припускають зберігання дати народження - тут не завжди відомий день або місяць народження. В таких випадках дата зберігається просто у вигляді 1999-00-00 або 1999-01-00 (при цьому не слід розраховувати на те, що для подібних дат функції DATE_SUB() або DATE_ADD дадуть правильні значення).

Нижче приведені деякі загальні рекомендації, корисні при роботі з типами даних дати і часу:

MySQL витягує значення для даного типу дати або часу тільки в стандартному форматі, але в той же час намагається інтерпретувати різноманітні формати, які можуть поступати від користувачів (наприклад, коли задається величина, якій слід привласнити тип дати або часу або порівняти із значенням, що має один з цих типів). Проте, підтримуються тільки формати, описані в слідуючого розділах. Передбачається, що користувач вводитиме допустимі значення величин, оскільки використовування величин в інших форматах може дати непередбачувані результати.

Хоча MySQL намагається інтерпретувати значення в декількох форматах, у всіх випадках очікується, що крайнім зліва буде розділ значення дати, що містить рік. Дати повинні задаватися в порядку год-месяц-день (наприклад, '98-09-04'), а не в порядку месяц-день-рік або день-месяц-рік, тобто не так, як ми їх звичайно записуємо (наприклад '09-04-98', '04-09-98').

MySQL автоматично перетворить значення, що має тип дати або часу, в число, якщо дана величина використовується в числовому контексті, і навпаки.

Значення, що має тип дати або часу, який виходить за межі встановленого інтервалу або є неприпустимим для цього типу даних (див. початок розділу), перетвориться в значення "нуль" для даного типу. (Виняток становлять що виходять за межі встановленого інтервалу величини типа TIME, які усікаються до відповідної граничної точки заданого інтервалу TIME). В таблиці 4.3. представлені формати значення "нуль" для кожного з типів стовпців:


Таблиця 3.3.

Нульові значення для типів даних дати і часу

Тип стовпця Значення "Нуль"

DATETIME '0000-00-00 00:00:00'

DATE '0000-00-00'

TIMESTAMP 00000000000000 (довжина залежить від кількості символів, що виводяться)

TIME '00:00:00'

YEAR 0000

Значення 'нуль' - особливі. Для їх зберігання або посилань на них можна явно застосовувати представлені в таблиці значення, а можна використовувати '0', що легше в написанні.


Типи даних datetime, date і timestamp

Далі розглянемо типи DATETIME, DATE і TIMESTAMP, які є спорідненими типами даних. Опишемо їх властивості, загальні риси і відмінності.

Тип даних DATETIME використовується для величин, що містять інформацію як про дату, так і про час. MySQL витягує і виводить величини DATETIME у форматі 'YYYY-MM-DD HH:MM:SS'. Підтримується діапазон величин від '1000-01-01 00:00:00' до '9999-12-31 23:59:59'. ("підтримується" означає, що хоча величини з більш ранніми тимчасовими значеннями, можливо, теж працюватимуть, але немає гарантії того, що вони правильно зберігатимуться і відображатимуться).

Тип DATE використовується для величин з інформацією тільки про дату, без частини, що містить час. MySQL витягує і виводить величини DATE у форматі 'YYYY-MM-DD'. Підтримується діапазон величин від '1000-01-01' до '9999-12-31'.

Тип стовпця TIMESTAMP забезпечує тип представлення даних, який можна використовувати для автоматичного запису поточних дати і часу при виконанні операцій INSERT або UPDATE. За наявності декількох стовпців типа TIMESTAMP тільки перший з них обновляється автоматично.

Для решти (окрім першого) стовпців типа TIMESTAMP також можна задати установку в значення поточних дати і часу. Для цього необхідно просто встановити стовпець в NULL або в NOW().

Будь-який стовпець типа TIMESTAMP (навіть перший стовпець даного типу) можна встановити в значення, відмінне від поточних дати і часу. Це робиться шляхом явної установки його в бажане значення. Дану властивість можна використовувати, наприклад, якщо необхідно встановити стовпець TIMESTAMP в значення поточних дати і часу при створенні рядка, а при подальшому оновленні цього рядка значення стовпця не повинне змінюватися.

Величини типа TIMESTAMP можуть приймати значення від початку 1970 року до деякого значення в 2037 році з дозволом в одну секунду. Ці величини виводяться у вигляді числових значень.

Формат даних, в якому MySQL витягує і показує величини TIMESTAMP, залежить від кількості символів, що показуються. Це проілюстровано в таблиці 4.4. Повний формат TIMESTAMP складає 14 десяткових розрядів, але можна створювати стовпці типа TIMESTAMP і з більш коротким рядком виведення:

Таблиця 3.4.

Формат даних TIMESTAMP залежно від кількості витягуваних розрядів

Тип стовпця Формат виведення

TIMESTAMP(14) YYYYMMDDHHMMSS

TIMESTAMP(12) YYMMDDHHMMSS

TIMESTAMP(10) YYMMDDHHMM


TIMESTAMP(8) YYYYMMDD

TIMESTAMP(6) YYMMDD

TIMESTAMP(4) YYMM

TIMESTAMP(2) YY

Величини DATETIME, DATE і TIMESTAMP можуть бути задані будь-яким стандартним набором форматів:

Як рядок у форматі 'YYYY-MM-DD HH:MM:SS' або у форматі 'YY-MM-DD HH:MM:SS'. Допускається "полегшений" синтаксис - можна використовувати будь-який знак пунктуації як розділове між частинами розділів дати або часу. Наприклад, величини '98-12-31 11:30:45', '98.12.31 11+30+45', '98/12/31 11*30*45' і '98@12@31 11^30^45' є еквівалентними.

Як рядок у форматі 'YYYY-MM-DD' або у форматі 'YY-MM-DD'. Тут також допустимий "полегшений" синтаксис. Наприклад, величини '98-12-31', '98.12.31', '98/12/31' і '98@12@31' є еквівалентними.

Як рядок без розділових знаків у форматі 'YYYYMMDDHHMMSS' або у форматі 'YYMMDDHHMMSS', за умови, що рядок розуміється як дата. Наприклад, величини '19970523091528' і '970523091528' можна інтерпретувати як '1997-05-23 09:15:28', але величина '971122129015' є неприпустимою (значення розділу хвилин є абсурдним) і перетвориться в '0000-00-00 00:00:00'.

Як рядок без розділових знаків у форматі 'YYYYMMDD' або у форматі 'YYMMDD', за умови, що рядок інтерпретується як дата. Наприклад, величини '19970523' і '970523' можна інтерпретувати як '1997-05-23', але величина '971332' є неприпустимою (значення розділів місяця і дня не мають сенсу) і перетвориться в '0000-00-00'.

Як число у форматі YYYYMMDDHHMMSS або у форматі YYMMDDHHMMSS, за умови, що число інтерпретується як дата. Наприклад, величини 19830905132800 і 830905132800 інтерпретуються як '1983-09-05 13:28:00'.

Як число у форматі YYYYMMDD або у форматі YYMMDD, за умови, що число інтерпретується як дата. Наприклад, величини 19830905 і 830905 інтерпретуються як '1983-09-05'.

Як результат виконання функції, що повертає величину, прийнятну в контекстах типів даних DATETIME, DATE або TIMESTAMP (наприклад, функції NOW() або CURRENT_DATE()).


Тип даних time

MySQL витягує і виводить величини типа TIME у форматі 'HH:MM:SS' (або у форматі 'HHH:MM:SS' для великих значень годинника). Величини TIME можуть змінюватися в межах від '-838:59:59' до '838:59:59'. Причина того, що "годинна" частина величини може бути настільки великою, полягає в тому, що тип TIME може використовуватися не тільки для представлення часу дня (яке повинне бути менше 24 годин), але також для представлення загального минулого часу або тимчасового інтервалу між двома подіями (який може бути значно більше 24 годин або навіть негативним).

Величини TIME можуть бути задані в різних форматах:

Як рядок у форматі 'D HH:MM:SS.дробна частина' (слід враховувати, що MySQL поки не забезпечує зберігання дробової частини величини в стовпці даного типу). Можна також використовувати одне з слідуючого "полегшених" уявлень: HH:MM:SS.дробная частина, HH:MM:SS, HH:MM, D HH:MM:SS, D HH:MM, D HH або SS. Тут D - це дні з інтервалу значень 0-33.

Як рядок без роздільників у форматі 'HHMMSS', за умови, що рядок інтерпретується як дата. Наприклад, величина '101112' розуміється як '10:11:12', але величина '109712' буде неприпустимою (значення розділу хвилин є абсурдним) і перетвориться в '00:00:00'.

Як число у форматі HHMMSS, за умови, що рядок інтерпретується як дата. Наприклад, величина 101112 розуміється як '10:11:12'. MySQL розуміє і наступні альтернативні формати: SS, MMSS, HHMMSS, HHMMSS.дробная частина. При цьому слід враховувати, що зберігання дробової частини MySQL поки не забезпечує.

Як результат виконання функції, що повертає величину, прийнятну в контексті типу даних типа TIME (наприклад, такої функції, як CURRENT_TIME).

Тип даних year

Тип YEAR - це однобайтний тип даних для представлення значень року.

MySQL витягує і виводить величини YEAR у форматі YYYY. Діапазон можливих значень - від 1901 до 2155.

Величини типа YEAR можуть бути задані в різних форматах:

Як чотиризначний рядок в інтервалі значень від '1901' до '2155'.

Як чотиризначне число в інтервалі значень від 1901 до 2155.

Як двухзначний рядок в інтервалі значень від '00' до '99'. Величини в інтервалах від '00' до '69' і від '70' до '99' при цьому перетворяться у величини YEAR в інтервалах від 2000 до 2069 і від 1970 до 1999 відповідно.

Як двухзначне число в інтервалі значень від 1 до 99. Величини в інтервалах від 1 до 69 і від 70 до 99 при цьому перетворяться у величини YEAR в інтервалах від 2001 до 2069 і від 1970 до 1999 відповідно. Необхідно взяти до уваги, що інтервали для двузначних чисел і двузначних рядків дещо розрізняються, оскільки не можна вказати "нуль" безпосередньо як число і інтерпретувати його як 2000. Необхідно задати його як рядок '0' або '00', або ж воно буде інтерпретовано як 0000.