Как можно хранить даты и время sql
SQLite не имеет встроенных типов данных для хранения в таблицах в базе данных дат и времени, тем не менее это не мешает хранить дату и время в базе данных также, как и любые другие данные. Для хранения дат и времени можно использовать типы TEXT , REAL и INTEGER
Тип TEXT
При использовании типа TEXT для хранения даты и времени они сохраняются в формате YYYY-MM-DD HH:MM:SS.SSS или YYYY-MM-DD HH:MM:SS , например, 2021-12-01 13:23:08
Для хранения отдельно даты применяется формат YYYY-MM-DD , а для хранения времени — формат HH:MM:SS
Например, определим следующую таблицу пользователей:
DROP TABLE IF EXISTS users; CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, date_of_birth TEXT ); INSERT INTO users (name, date_of_birth) VALUES ('Tom', '1987-05-12'), ('Bob', date('now', '-41 years')), ('Sam', date('2021-11-29', '-25 years'));
Для установки даты и времени при сохранении данных можно напрямую использовать текстовый формат ( «1987-05-12» ) или применять функции для работы с датами и временем ( date(‘now’, ‘-41 years’) ).
Хранимые значения мы можем далее использовать в функциях, которые работают с датами и временем. Например, используя хранимую дату дня рождения, найдем возраст пользователей:
SELECT name, date('now')-date_of_birth AS age FROM users;
Другой пример — получение пользователей, день рождения которых находится в определенном диапазоне дат:
SELECT name, date_of_birth FROM users WHERE date_of_birth BETWEEN '1950-01-01' AND '1991-12-31';
Аналогичным образом можно сохранять дату и время полностью. Например, определим таблицу заказов, которая хранит дату и время заказа:
DROP TABLE IF EXISTS orders; CREATE TABLE orders ( id INTEGER PRIMARY KEY AUTOINCREMENT, date_time TEXT NOT NULL ); INSERT INTO orders (date_time) VALUES ('2021-11-30 22:01:15'), (datetime('now')), (datetime('now', '-5 hours')); SELECT * FROM orders;
К примеру найдем все заказы за ноябрь 2021 года:
SELECT * FROM orders WHERE date_time BETWEEN '2021-11-01' AND '2021-11-30';
Или найдем заказы, сделанные за текущий день:
SELECT * FROM orders WHERE date_time BETWEEN datetime('now', 'start of day') AND datetime('now');
REAL
Также можно хранить дату и время в виде значения REAL . В этом случае столбец хранит количество дней с начала юлианской эпохи. Например, возьмем предущую таблицу заказов и изменим в ней для даты и времени заказа тип с TEXT на REAL:
DROP TABLE IF EXISTS orders; CREATE TABLE orders ( id INTEGER PRIMARY KEY AUTOINCREMENT, date_time REAL NOT NULL ); INSERT INTO orders (date_time) VALUES (julianday('2021-11-30 22:01:15')), (julianday('now')), (julianday('now', '-5 hours'));
Хранимое значение REAL с помощью функцию мы можем преобразовать в дату и время:
SELECT date_time, datetime(date_time) FROM orders;

INTEGER
Также можно использовать тип INTEGER . В этом случае дата и время хранятся в виде количества секунд, прошедших с начала эпохи UNIX (хотя это ограничивает набор дат началом эпохи UNIX — 1970-01-01 00:00:00 UTC). Например, возьмем предыдущую таблицу заказов и изменим в ней для даты и времени заказа тип на INTEGER :
DROP TABLE IF EXISTS orders; CREATE TABLE orders ( id INTEGER PRIMARY KEY AUTOINCREMENT, date_time INTEGER NOT NULL ); INSERT INTO orders (date_time) VALUES (strftime('%s', '2021-11-30 22:01:15')), (strftime('%s', 'now')), (strftime('%s', 'now', '-5 hours'));
Функция strftime с помощью параметра «%s» получает количество секунд, прошедших с начала эпохи UNIX относительно заданной даты. И также это значение мы можем преобразовать в читабельные дату и время:
SELECT date_time, datetime(date_time, 'unixepoch') FROM orders;
Использование типа данных «Дата и время (расширенный)»
Тип данных Date/Time Extended предназначен для хранения информации о дате и времени, он аналогичен типу данных Date/Time, но обеспечивает более широкий диапазон дат, более высокую точность дробных значений, а также совместимость с типом дат datetime2 SQL Server. При импорте или связывании данных Access с SQL Server можно непосредственно размещать данные из поля Date/Time Extended в Access в столбце datetime2 в SQL Server. Дополнительные сведения см. в datetime2 (Transact-SQL).

Предупреждение При создании выражений и использовании функций date/time на основе типа данных Date/Time Extended в Access возможна потеря точности вычислений или возникновение других проблем с результатами. Нам известна эта проблема, и мы планируем улучшить поддержку выражений и функций в предстоящем выпуске. В качестве временного решения проблемы можно создать запрос к внешнему источнику для использования эквивалентного выражения и функций date/time SQL Server. Дополнительные сведения см. в статье Сравнение языков Access SQL и SQL Server TSQL.
В этой статье
Сравнение типов данных Date/Time и Date/Time Extended
В нижеприведенных таблицах перечислены важные различия между двумя типами данных.
Двойная точность числа с плавающей запятой
Строка кодировки из 42 байтов
Использование типа данных Date/Time Extended
Ниже приведены важные практические рекомендации.
Режим конструктора таблиц Чтобы использовать преимущества большего диапазона данных и их более высокой точности, можно добавить поле в таблицу Access. Кроме того, вы можете преобразовать тип данных Date/Time в Date/Time Extended в режиме конструктора таблиц. Поле этого типа данных также можно использовать в качестве поля первичного ключа. Дополнительные сведения см. в статье Создание таблицы и добавление полей.
Ввод даты и времени Ввод значений даты и времени производится так же, как в типе данных Date/Time, за исключением того, что дробную часть теперь можно ввести в наносекундах. Например:
- Формат записи: дд/мм/гггг чч:мм:сс,ннннннн
- Пример: 15/06/1215 09:25:3,234
Если количество десятичных разрядов в долях секунды превышает 7, число округляется до 7 разрядов. Чтобы изменить формат отображения дробной части, откройте таблицу, на ленте выберите Поля, а затем в группе Форматирование выберите Увеличить разрядность или Уменьшить разрядность .
Форматирование Типы данных Date/Time и Date/Time Extended используют одинаковые стандартные строки форматирования: Общий формат даты, Длинный формат даты, Средний формат даты, Короткий формат датыДлинный формат времени, Средний формат времении Короткий формат времени. Оба типа данных поддерживают пользовательское форматирование. Для типа данных Date/Time Extended стандартные форматы, основанные на времени, также поддерживают точность дробных значений в наносекундах. При форматировании типа данных Date/Time Extended по умолчанию используются Общий формат даты и Длинный формат времени, а также параметры, заданные в Региональных параметрах Windows. Кроме того, можно управлять форматированием округления с помощью параметра Разрядность, указав количество цифр справа от десятичной запятой (1–7).
Связывание и импорт Кроме того, можно создать связь с данными или импортировать их из баз данных, содержащих соответствующий тип данных, например тип данных datetime2 в SQL Server. Поддерживаются базы данных SQL Server версии 2014 и более поздних версий. Для типа данных Date/Time Extended необходимо использовать драйвер Microsoft ODBC for SQL Server 11 или более поздней версии. Рекомендуем использовать Microsoft ODBC Driver 13.1 для SQL Server. Также поддерживается использование OLE DB. Дополнительные сведения см. в статьях Поддержка типов данных для улучшений, касающихся даты и времени в ODBC и Использование расширенных функций даты и времени (OLE DB).
Формы и отчеты В форму или отчет можно добавлять данные типа Date/Time Extended. В форме можно использовать элемент управления «Выбор даты» и маску ввода, чтобы указать дату с более широким диапазоном, но точность дробных значений в наносекундах не поддерживается.
Поддержка выражений Тип данных Date/Time Extended поддерживает агрегатные функции SQL и оценку выражений. Например, использование LoggedDateTime в качестве поля типа данных Date/Time Extended:
Поиск минимального значения
Самые ранние значения даты и времени в диапазоне.
В каком формате хранить дату в БД?
Есть бд на MYSQL. В каком формате лучше хранить дату для дальнейших манипуляций с ней. Какие минусы, если хранить в timestamp . Какие минусы в Date .
Отслеживать
2,969 3 3 золотых знака 15 15 серебряных знаков 30 30 бронзовых знаков
задан 9 окт 2015 в 12:12
duddeniska duddeniska
3,948 17 17 золотых знаков 66 66 серебряных знаков 112 112 бронзовых знаков
Речь идет только о дате или о связке дата+время?
9 окт 2015 в 12:57
4 ответа 4
Сортировка: Сброс на вариант по умолчанию
DATETIME
Хранит время в виде целого числа вида YYYYMMDDHHMMSS, используя для этого 8 байтов. Это время не зависит от временной зоны. Оно всегда отображается при выборке точно так же, как было сохранено, независимо от того какой часовой пояс установлен в MySQL.
TIMESTAMP
Хранит 4-байтное целое число, равное количеству секунд, прошедших с полуночи 1 января 1970 года по усреднённому времени Гринвича (т.е. нулевой часовой пояс, точка отсчёта часовых поясов). При получении из базы отображается с учётом часового пояса. Часовой пояс может быть задан в операционной системе, глобальных настройках MySQL или в конкретной сессии. Запомните, что сохраняется всегда количество секунд по UTC (универсальное координированное время, солнечное время на меридиане Гринвича), а не по локальному часовому поясу
Как можно хранить даты и время sql
Существуют следующие типы данных даты и времени: 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 ). В следующей таблице представлены форматы значения «ноль» для каждого из типов столбцов:
Тип столбца Значение «Ноль» DATETIME ‘0000-00-00 00:00:00’ DATE ‘0000-00-00’ TIMESTAMP 00000000000000 (длина зависит от количества выводимых символов) TIME ’00:00:00′ YEAR 0000 - Значения «ноль» — особые. Для их хранения или ссылок на них можно явно применять представленные в таблице значения, а можно использовать `0′ или `0′ , что легче в написании.
- Значения «ноль» даты или времени при использовании MyODBC автоматически конвертируются в NULL в версии MyODBC 2.50.12 и выше, так как ODBC не оперирует с подобными величинами.
Главы
- 6.2.2.1 Проблема 2000 года и типы данных
- 6.2.2.2 Типы данных DATETIME , DATE и TIMESTAMP
- 6.2.2.3 Тип данных TIME
- 6.2.2.4 Тип данных YEAR
