- Типы данных и функции даты и времени (Transact-SQL)
- Типы данных даты и времени
- Функции даты и времени
- Функции, возвращающие значения системной даты и времени
- Высокоточные функции системной даты и времени
- Выбор дней рождения на MySQL + мелочи
- Простой запрос (Именинники, дата рождения на сегодняшний день)
- Создание Sql запроса для вывода даты рождения по возрасту
- Решение
- Решение
- Функция даты SQL
- Введение в функцию даты SQL
- Дата Функции SQL
- 1. СЕЙЧАС ()
- 2. КУРДАТА ()
- 3. CURTIME ()
- 4. ДАТА (expr)
- 5. ВЫПИСКА (единица ИЗ ДАТЫ)
- 6. DATEADD (дата, интервал expr):
- 7. DATEDIFF ()
- 8. DATE_FORMAT (дата, формат)
- 9. DAYNAME (дата)
- 10. DAYOFMONTH (дата)
- 11. DAYOFWEEK (дата)
- 12. DAYOFYEAR (дата)
- 13. DATE_SUB (дата, единица измерения INTERVAL)
- 14. MAKEDATE (год, дни)
- 15. МАКЕТИМ (час, минута, секунда)
- Другие функции даты
- Вывод
- Рекомендуемые статьи
Типы данных и функции даты и времени (Transact-SQL)
Применимо к: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics
В разделах этой статьи представлен обзор всех типов данных и функций даты и времени Transact-SQL.
Типы данных даты и времени
Типы данных даты и времени Transact-SQL перечислены в следующей таблице:
Тип данных | Формат | Диапазон | Точность | Объем памяти (в байтах) | Определяемая пользователем точность в долях секунды | Смещение часового пояса |
---|---|---|---|---|---|---|
time | чч:мм:сс[.ннннннн] | От 00:00:00.0000000 до 23:59:59.9999999 | 100 наносекунд | от 3 до 5 | Да | Нет |
date | ГГГГ-ММ-ДД | От 0001-01-01 до 31.12.99 | 1 день | 3 | Нет | Нет |
smalldatetime | ГГГГ-ММ-ДД чч:мм:сс | От 01.01.1900 до 06.06.2079 | 1 минута | 4 | нет | Нет |
datetime | ГГГГ-ММ-ДД чч:мм:сс[.ннн] | От 01.01.1753 до 31.12.9999 | 0,00333 секунды | 8 | Нет | Нет |
datetime2 | ГГГГ-ММ-ДД чч:мм:сс[.ннннннн] | От 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59.9999999 | 100 наносекунд | От 6 до 8 | Да | Нет |
datetimeoffset | ГГГГ-ММ-ДД чч:мм:сс[.ннннннн] [+|-]чч:мм | От 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59.9999999 (время в формате UTC) | 100 наносекунд | От 8 до 10 | Да | Да |
Тип данных Transact-SQL rowversion не относится к типам данных даты и времени. Тип данных timestamp является устаревшим синонимом rowversion.
Функции даты и времени
В следующих таблицах приводятся функции даты и времени Transact-SQL. Дополнительные сведения о детерминизме см. в статье Детерминированные и недетерминированные функции.
Функции, возвращающие значения системной даты и времени
Transact-SQL наследует все значения системной даты и времени от операционной системы компьютера, на котором работает экземпляр SQL Server.
Высокоточные функции системной даты и времени
SQL Server 2019 (15.x) получает значения даты и времени с помощью функции GetSystemTimeAsFileTime() Windows API. Точность зависит от физического оборудования и версии Windows, в которой запущен экземпляр SQL Server. Точность возвращаемых значений этого API-интерфейса задана равной 100 нс. Точность может быть определена с помощью метода GetSystemTimeAdjustment() API-интерфейса Windows.
Источник
Выбор дней рождения на MySQL + мелочи
Дали задание: выбрать из базы пользователей, у которых на днях день рождения, — для вывода на главной странице сайта.
Используем PHP (ZF) & MySQL.
Поле в нашей БД имеет тип “date”, что уже хорошо. Задание простое, начал писать, …
Быстрее, думаю, погуглить, зачем велосипед изобретать, явно уже решалось сотни раз.
Посмотрел первый запрос, — неправильно он работает, второй – тоже…
Нашел правильный, но он оказался таким монстроподобным.
Удивлению не было предела – некоторые из этих «велосипедов» изобретены в текущем году!
Написал в итоге сам. Для начала попроще (Здесь выбираются дни рождения с 01 сент. по 29 окт.):
SELECT * FROM users__accounts WHERE DATE_FORMAT(birthday, ‘%m%d’ ) >= ‘0901’ AND DATE_FORMAT(birthday, ‘%m%d’ ) ‘1029’
* This source code was highlighted with Source Code Highlighter .
Но надо задать период на ближайшие N дней. И как же новогодний переход?
Написал нечто подобное:
SET @dayplus:=15;
SET @andor:= CASE WHEN YEAR (CURDATE() + INTERVAL @dayplus DAY ) — YEAR (CURDATE()) THEN ‘OR’ ELSE ‘AND’ END ;
SET @fromdate:=DATE_FORMAT(CURDATE(), ‘%m%d’ );
SET @todate:=DATE_FORMAT(CURDATE() + INTERVAL @dayplus DAY , ‘%m%d’ );
SET @birthday_query:=CONCAT(» SELECT * FROM users__accounts WHERE DATE_FORMAT(birthday, ‘%m%d’ ) >= @fromdate «,
@andor, » DATE_FORMAT(birthday, ‘%m%d’ ) PREPARE birthday_query FROM @birthday_query;
EXECUTE birthday_query;
DEALLOCATE PREPARE archive_query;* This source code was highlighted with Source Code Highlighter .
Решил, что процедуры SQL мне еще рано писать. К тому же сформированный на Zend Framework запрос будет проще. Получилось:
class Users extends Zend_Db_Table_Abstract
<
protected $_name = ‘users__accounts’ ;
/**
.
*/
public function getBirthdayUsers($count, $days = 7)
<
$date = new Zend_Date();
/* сегодня */
$dateFrom = $date->toString( ‘MMdd’ );
/* мы заботимся о каждом 😉 */
if ($dateFrom == ‘0301’ && !$date->isLeapYear()) <
$dateFrom = ‘0229’ ;
>
$yearFrom = $date->toString( ‘YY’ );
$date->addDay($days);
/* сегодня + $days дней */
$dateTo = $date->toString( ‘MMdd’ );
$nextYear = $yearFrom — $date->toString( ‘YY’ );
$select = $ this ->getAdapter()->select()
->from(array( ‘u’ => $ this ->_name))
->where( «date_format(u.birthday,’%m%d’) >= ?» , $dateFrom)
->order( ‘DAYOFYEAR(u.birthday)’ )
->limit($count);
/* переход на следующий год — OR / AND */
if ($nextYear == 0) <
$select->where( «date_format(u.birthday,’%m%d’) , $dateTo);
> else <
$select->orWhere( «date_format(u.birthday,’%m%d’) , $dateTo);
>
$users = $select->query()->fetchAll();
return $users;
>
>
* This source code was highlighted with Source Code Highlighter .
Константы передаются из PHP, а не вычисляются внутри запроса.
Теперь перечислю подводные камни ранее найденных велосипедов:
1. Не учитывался переход на новый год
2. Не учитывался високосный год при выборке по DAYOFYEAR() – ошибка на 1 день
3. К сожаленью, день рожденья, только раз… в 4 года
3. Слишком сложные вычисления
3. Выпадали крайние даты
Думаю тем, кто не использует ZF, тоже пригодится.
Сам SQL запрос получился довольно простой, но для очень больших БД надо заводить отдельное поле и индексировать. Часовые пояса не учитываются текущему по заданию.
Заодно и вычисление возраста приведу на PHP (в MySQL – еще проще). Т.к. встречал реализации от расчета в секундах (с високосной погрешностью) до «интегральных» на две страницы кода.
$now = time();
$age = date( ‘Y’ , $now) — date( ‘Y’ , $birth);
if (date( ‘md’ , $now) ‘md’ , $birth)) <
$age—;
>
>
* This source code was highlighted with Source Code Highlighter .
П.С. Если существует более правильный велосипед, напишите. Тогда уж точно покончим с изобретением велосипедов данного типа. 🙂
Если минусуете, то ставьте плюс лучшему варианту из комментов, или предлагайте свой.
Источник
Простой запрос (Именинники, дата рождения на сегодняшний день)
Всем доброго времени суток. Столкнулся с проблемой при создании запроса.
БД:
Таблица персонал. Поля: счётчик, фамилия, имя, дата рождения.
Суть проблемы:
Создание запроса, выводящего имя, фамилию, дату рождения сотрудника, у которого сегодня день рождения. Перепробовал много чего, перелистал много чего, но ответа так и не нашел. Каждый день приходится менять дату рождения сотрудника типа под сегодняшний день Уже нервов нет на этот запрос
. Помогите, пожалуйста.
Методы решения:
Предпочтительнее на пальцах в конструкторе (формулу для построителя). Можно и SQL. Не макрос.
Если тема заезжена и разжевана где-то в прошлом — указать ссылку.
Заранее благодарен за любую помощь в вопросе.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Отчет «Именинники» день рождения которых будет в ближайшие 7 дней
Уважаемые форумчане. Пожалуйста, помогите речить следующую задачу: есть список сотрудников.
Определить возраст человека на сегодняшний день (по году и месяцу рождения)
ПОМОГИТЕ Создать программу на Си которая определяет возраст человека на сегодняшний день. Известны.
Как проверить dateTimePicker чтобы на сегодняшний день дата была на 10 лет больше?
Нужно проверить условие чтобы дата из dateTimePicker была на 10 лет больше установленной. Например.
Задать базе MySQL запрос на выборку за сегодняшний день?
как задать базе mysql запрос на сегодняшний день? Чтоб оно вывело данные с 00:00 до 23:59
Источник
Создание Sql запроса для вывода даты рождения по возрасту
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Создание запроса SQL для вывода данных
Здравствуйте уважаемые знатоки SQL. У меня есть вопрос который я не могу решить самостоятельно уже.
создание sql запроса на проверку даты
Добрый день! Необходимо проверить файл excel на наличие ошибок в заполнении, в частности, ошибки.
Как изменить код для вывода SQL запроса
Подскажите пожалуйста, как можно изменить вот этот код для того что бы данные брались не с DBGrid а.
Создание SQL запроса для БД
Имеется 2БД с полями : 1)Платежи (Номер квитанции, Вид платежа, сумма платежа, дата плате- жа, код.
kazanseva, а в базе записи так же храняться просто возрастом (например=15), или именно датой рождения (например=21.01.1987)?
Добавлено через 7 минут
Рассчитать год рождения
тогда вам вот это подойдет
Определяем дату рождения (где 28, это возраст человека):
Решение
Ниже представлен код который создан для кнопки по которой выполняется запрос и данные отправляются на DataGridView1
Решение
Создание кнопки для вывода данных из MS SQL
Всем привет! Данные нормально выводятся. только вот я не знаю, как это сделать, нажав на.
Создание запроса в MS Access для вывода интервала дат с учетом пересечения этих интервалов
Доброго времени суток дамы и господа как то на этом форуме мне очень помогли с задачей похожего.
Создание и проверка даты рождения
Здравствуйте, уважаемые программисты! Мне необходимо ввести дату рождения в Textbox в формате.
Создание запроса дня рождения
Друзья, помогите справиться с задачей. Необходимо сделать запросы: Дни рождения вчера, сегодня.
Формат вывода результата sql-запроса
Доброго времени суток. Подскажите пожалуйста, как реализовать следующую задачу: имеется запрос.
Проблема с форматом даты при выполнении SQL — запроса
Всем привет! Обращаюсь к базе SQL запросом. В Запрсе есть параметр Дата. Дату юзверь будет вводить.
Источник
Функция даты SQL
Введение в функцию даты SQL
Работа с базой данных не очень сложна, поскольку необходимо знать основные запросы и ключевые слова, которые следует использовать для извлечения, обновления и удаления данных в базе данных. SQL позволяет нам хранить структурированные данные (данные в виде строк и столбцов) и предоставляет простые запросы для работы с ними. В этом разделе мы обсудим функцию даты SQL.
Дата является одной из наиболее важных функций, используемых в SQL, но новичкам несколько трудно понять ее, поскольку существует множество форматов, в которых дата может храниться в базе данных, и в разных форматах, которые пользователь хочет получить в зависимости от особые требования. В SQL DateTime (время также используется вместе с датой) часто используется для хранения значений даты и времени одновременно в одном столбце.
Дата Функции SQL
Давайте разберем каждую функцию даты, используемую в SQL, одну за другой:
1. СЕЙЧАС ()
NOW () используется для возврата текущей системной даты и значения времени.
Запрос:
Вывод: 2019-08-06 08:10:12
2. КУРДАТА ()
CURDATE () используется для возврата текущей системной даты.
Запрос:
Выходные данные: 2019-08-06
3. CURTIME ()
CURTIME () используется для возврата текущего системного времени.
Запрос:
Выход: 08:10:12
4. ДАТА (expr)
Извлекает только часть даты из столбца, имеющего значение DateTime.
Запрос:
SELECT DATE(‘2019-08-06 08:10:12’);
Выходные данные : 2019-08-06
5. ВЫПИСКА (единица ИЗ ДАТЫ)
Функция EXTRACT () используется для извлечения определенной части значения даты / времени.
Рассмотрим следующую таблицу «студент» для этого:
Я бы
Запрос:
SELECT id, name, EXTRACT(DAY FRO from the student; M birthday) AS day_of_birth
Я бы
6. DATEADD (дата, интервал expr):
Эта функция используется в сценариях, когда мы хотим отобразить дату, добавив некоторое значение к исходному значению. DATEADD (дата, интервал expr)
Запрос:
SELECT DATEADD(‘2019-06-05’, INTERVAL 5 DAY);
Выход: 2019-06-10
Здесь Единица, которая является ДНЕМ в приведенном выше примере, может иметь разные значения
7. DATEDIFF ()
Эта функция возвращает разницу количества дней от даты2 до даты1
Запрос:
SELECT DATEDIFF(‘2019-06-03’, ‘2019-06-05’);
Выход: 2
8. DATE_FORMAT (дата, формат)
Это одна из важных функций, используемых в SQL.
Эта функция возвращает дату в различных форматах в зависимости от спецификатора, указанного пользователем.
Тендерный | Описание |
% в | Отображает сокращенное название дня недели (вс-сб) |
% D | Отображает день месяца с английским суффиксом (1, 2, 3 ..) |
% d | Отображает день месяца в числовых значениях (00..31) |
% б | Отображает сокращенное название месяца (январь-декабрь) |
% с | Отображает месяц в числовых значениях (1, 2, 3…) |
%час | Отображает час (01-12) |
%ЧАС | Отображает час (00-23) |
% м | Отображает название месяца в цифрах (0-12) |
% M | Отображает название месяца на английском языке (январь-декабрь) |
% мас | Отображает день недели (0-6) |
% W | Отображает название дня недели (воскресенье-суббота) |
% s | Отображение секунд (00..59) |
% S | Отображение секунд (00..59) |
% г | Отображает числовой год в двух цифрах |
% Y | Отображает числовой год в четыре цифры |
Запрос:
SELECT DATE_FORMAT(‘2019-06-03 09:40:05’, %W %M %y);
Выходной : понедельник, 19 июня
9. DAYNAME (дата)
Эта функция возвращает имя даты для указанной даты.
Запрос:
Выходной : понедельник
10. DAYOFMONTH (дата)
Эта функция возвращает день месяца для указанной даты.
Запрос:
Выход: 3
11. DAYOFWEEK (дата)
Эта функция возвращает индекс дня недели для указанной даты: назначенные индексы: воскресенье = 1, понедельник = 2, вторник = 3 и т. Д.
Запрос:
Выход: 2
12. DAYOFYEAR (дата)
Эта функция возвращает день месяца для года для указанной даты. Диапазон от 1 до 366.
Запрос:
Выход: 154
13. DATE_SUB (дата, единица измерения INTERVAL)
Эта функция используется для вычитания заданных значений даты / времени из указанной даты
Запрос:
SELECT DATE_SUB(‘2019-06-03’, INTERVAL 4 DAY);
Выходные данные : 2019-05-31
Как и функция DATE_ADD (), могут быть различные значения INTERVAL.
14. MAKEDATE (год, дни)
Эта функция создает дату на основе года и дней, предоставленных пользователем. Но год должен содержать 4 цифры
Запрос:
SELECT MAKEDATE(2019, 154);
Выходные данные: 2019-06-03
15. МАКЕТИМ (час, минута, секунда)
Эта функция возвращает время на основе значения часов, минут и секунд, предоставленных пользователем.
Запрос:
SELECT MAKETIME(09, 20, 05);
Выход : 09:20:05
Другие функции даты
о.
имя
HOUR (’03: 24: 27′ )
МИНУТЫ (’03: 27: 24′ )
МЕСЯЦ ( ‘2019-06-09’)
ДД ЧЧ: ММ: СС
TIME_TO_SEC (’11: 15
: 10′ )
(’19 -06-09′ )
( ‘2019-06-09’)
Среда, так далее)
( ‘2019-06-09’)
Вывод
Выше упомянуты некоторые основные функции даты, используемые в SQL. Есть несколько других функций даты, используемых в разных сценариях. Нужно помнить о синтаксисе и аргументе, переданном в функцию, прежде чем использовать любой из них, чтобы избежать неожиданных результатов.
Рекомендуемые статьи
Это руководство по функции даты SQL. Здесь мы подробно обсудим функцию Date, используемую в SQL, с примерами и выводами. Вы также можете взглянуть на следующие статьи, чтобы узнать больше —
- Внешний ключ в SQL
- SQL Вставить Запрос
- Таблица в SQL
- Типы объединений в SQL
- 6 лучших типов соединений в MySQL с примерами
Источник