Новини високих технологій
» » Дата і час в MySQL: date format, сортування і локалізація

Дата і час в MySQL: date format, сортування і локалізація

7-12-2017, 22:03
1 039
Природне уявлення про час - це дати: рік, місяць, день і час: годинник, хвилини секунди. В деяких додатках мають значення дні тижня і частки секунд, але у всіх додатках і завжди необхідні інструменти для обробки змінних часу та їх подання в природному вигляді.
Час характеризується місцем у просторі, де подія відбувається і точкою, де воно може бути використано. Це загальний порядок, який визначає необхідність локалізації та облік часових поясів.

MySQL: типи даних для запису часу

Формально, типи даних в системі управління базами даних MySQL становить п'ять описателей (date, time, timestamp та year). Розробник часто віддає перевагу універсальний варіант: char (20) - коли є об'єктивні підстави використовувати свою інтерпретацію функції MySQL date_format() або забезпечити необхідні умови для правильного сортування.



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

Мітка часу і її формат

Цей тип поля часу (timestamp) і використання функції MySQL date_format() надзвичайно ефективно для створення міток часу. Це «не має ніякого відношення» до будь-якого алгоритму. Це не вимагає особливих вишукувань в уявленні дати або часу. Це просто тимчасова мітка - точка на лінії розвитку подій.


Поле цього типу заповнюється в момент створення рядка. Немає необхідності приділяти йому увагу, але завжди і в будь-якому запиті можна покластися: MySQL date_format () datetime = час, коли рядок була створена. Важливо, звісно, ніколи його не змінювати. Рядок створена і час її створення визначено лише одного разу. Читати можна, змінювати не можна. У даного рішення дуже багато сфер застосування: протокол діалогу з відвідувачем; лог журналу безпеки; відстеження дій співробітників; календар подій; поштову скриньку і т. д. Час - це, насамперед, низка подій. Все, що пов'язано з веб-ресурсом, що прагне до досконалості, зростанню рейтингу і реальному відображенню дійсності так чи інакше пов'язане з правильним відображенням часу: у тому вигляді, як є, - це не видно користувачеві, але доступно розробнику; у тому вигляді, як це має бути відображено на веб-ресурсі, використане в алгоритмі, враховано в документі і т. д. Час багатогранно і залежить від тієї точки простору, де відбулася подія в контексті тієї точки простору, де воно повинно бути використане чи відображено.

Загальний сенс MySQL select date_format()

Запит на вибірку інформації - головна фраза на мові SQL. Вона настільки затребувана, що дуже важливо при формуванні потрібної вибірки максимально швидко перетворювати її вміст в належний вигляд, не обтяжуючи алгоритм додатковими конструкціями.
З цієї точки зору MySQl date_format() дозволяє оформляти будь-яке значення дати і часу в той формат, в який необхідно відразу в момент виконання запиту. У таблиці наведено два рядки і є два однакових поля: "x_timestamp" і "x_datetime". Запит звертається до цих двох полів, але вказує їх імена, минаючи PHP, в date MySQL format безпосередньо.
Рядок форматування може бути будь-якою. Зміст рядка форматування транслюється в результат запиту у форматі «як є» з заміною ключових елементів формату «%*», де символ зірочки означає символ формату: рік, місяць, день і годину.

Національний формат часу і сортування

Використання дати в стандарті типу MySQL - краще рішення для використання функціоналу мови SQL. Немає проблем ні з сортуванням, ні з обчисленнями, ні з форматуванням в стилі MySQL date_format(). Але не у всіх країнах робочий тиждень починається з неділі, не завжди вважається нормальним подання часу в 12-годинному форматі, і не у всіх мовах є поняття "AM" і "PM". Є багато такого роду національних особливостей, але переважна більшість з них лежить за межами функціоналу мови SQL.
Сумнівно, що взагалі існує такий діалект SQL, який здатний розширитися на облік національного колориту країн далі, ніж за межі терміна "локалізація". Власне, не дивно, що "локалізація" на практиці означає більше автозаміну одних слів (сполучень) на інші в залежності від мови. Але не завжди національна мова визначає все, в першу чергу, він ніяк не пов'язаний з правильним поданням часу.

Ключ подій і ключ даних

Час ніколи не тече назад, отже, це ідеальний ключ до будь-рядку, до будь-якої таблиці, до будь базі даних. Дві події можуть відбутися одночасно, якщо інтервал їх відстеження більше, ніж різниця в часі між їх появою. Наприклад, два користувача зайшли на сайт в одну і ту ж хвилину, але в різні секунди цієї хвилини.
На PHP є цікаве рішення: є об'єкт і є екземпляр об'єкта. Є ідея статичної «змінної»: private static $iUniqueNo = -1; //"УУ" завжди унікальне число //при кожному виклику цієї функції $iUniqueNo буде іншим і //протягом однієї секунди ніколи не повториться. public function IncUniqueNo() { if (self::$iUniqueNo > 99) self::$iUniqueNo = 0; else self::$iUniqueNo++; } Не надто фантазуючи, зливаючи в одне ціле: рік, місяць, день, години, хвилини, секунди і $iUniqueNo, отримуємо: ГГГГММДДччммссУУ - унікальний ключ ("УУ" = "$iUniqueNo") для запису і одночасно штамп моменту часу для будь-якого використання. Це ідеальне рішення в контексті типу часу бази даних і функції MySQL date_format(), яка елементарно робить і час, і ключ з одного поля "timestamp" одночасно.
Цікаво по темі
Групування записів MySQL: group by
Групування записів MySQL: group by
Групування й аналіз записів таблиць бази даних представляють практичний інтерес у багатьох областях застосування. Рішення такого роду задач засобами
Вибір унікальних записів в запиті MySQL: select distinct
Вибір унікальних записів в запиті MySQL: select distinct
Простота запиту - це мистецтво. Легко сприймається відображення інфраструктури завдання на мінімально необхідну кількість таблиць і зв'язків між ними
Як використовувати MySQL: timestamp і datetime
Як використовувати MySQL: timestamp і datetime
Час завжди має особливе значення. Що і як використовувати для запису часу подій, часто має істотне значення. З одного боку стандартні можливості
Доступ до результатів вибірки через MySQL fetch array
Доступ до результатів вибірки через MySQL fetch array
MySQL fetch array обробляє результати вибірки з бази даних і повертає в якості результату звичайний, асоціативний або обидва масиву відразу. Фактично
Видалення дублікатів MySQL distinct
Видалення дублікатів MySQL distinct
Видалення дублікатів MySQL distinct - потрібна операція. Багато вирішення завдань представлення та обробки інформації за допомогою реляційних баз
MySQL select select from: оператор вибірки
MySQL select select from: оператор вибірки
MySQL - одна з найпопулярніших систем управління базами даних (СУБД). У даній статті ми розглянемо базову функціональність оператора вибірки SELECT,