Microsoft SQL дата имеет огромное значение. Не зная ее основ, невозможно преуспеть ни в одном проекте. Предлагаем вспомнить основные термины, поговорить об особенностях работы с ними. Для тех, кто не знаком с этими понятиями в SQL Server, данная статья – прекрасный повод выучить их.
Почему важно разбираться
MS SQL дата применяется для хранения в базе данных различный сведений, связанных с понятиями даты и времени. Таковыми являются сведения, когда добавлялись или удалялись какие-либо данные, регистрировались пользователи, осуществлялась авторизация и т.д.
Эти значения очень важны в MS SQL Server. Невозможно достичь успеха ни в одном проекте, не зная операторов MS SQL дата. С ними приходится работать во всех сервисах. Чаще всего, это определение временных интервалов между определенными датами.
В SQL существует большое количество функций, которые связаны с этим типом данных. Поговорим о них подробнее.
Используемые функции даты
Воспользовавшись специальными функциями, можно получить текущие (Current) значения:
- NOW() – пары даты и времени;
- CURDATE() — возвращает текущую дату (Missing Time);
- CURTIME() — исключительно время (Missing Date).
Вышеперечисленные функции чаще всего применяются для внесения записей в БД и сохранения даты, когда это было сделано. Хороший пример – при добавлении заметки на сайт необходимо сохранить, когда была размещена публикация.
Операторы
Для применения MS SQL дата необходимо разбираться в операторах:
Функции:
- DATE_FORMAT() — для разных способов вывода сведений о времени.
Указывает из чего состоит:
- DATE() — из даты со временем.
Возврат значений:
- DATEDIFF() — временного отрезка между определенными датами.
- EXTRACT() — единого значения даты/времени.
Выполнения действий:
- DATE_ADD() — добавления определенного количества единиц времени до выборки;
- DATE_SUB() — вычисления указанного интервала от даты.
Популярные операции с ms sql дата
Рассмотрим наиболее популярные операции, осуществляемые с датами (Dates) и временем (Time):
ФункцияВыполняет действияПримечаниеADDDATE (date, INTERVAL value)Процесс сложения даты (date) и определенного значения (value)Value – любая единица измерения времени (в годах, кварталах, месяцах, неделях, днях, часах, минутах, секундах)SUBDATE (date, INTERVAL value)Процесс вычитания из даты date значения value PERIOD_ADD (period, n)Сложение значения period с n-ным количеством месяцев TIMESTAMPADD (interval, n, date)Сложение даты date с n-ным временным интервалом intervalInterval – те же единицы измерения, что и для value в ADDDATE (включая микросекунды)SUBTIME (date, time).Вычитание из даты date определенного временного интервала time
Функции подсчета интервала
В таблице представлены специальные функции для нахождения интервалов между определенными датами:
ФункцияВыполняет действияПримечаниеTIMEDIFF (date1, date2)Определяет разницу между date1 и date2Результат представлен в часах, минутах, секундахDATEDIFF (date1, date2)Высчитывает разницу между date1 и date2Результат выдает в днях. Она поможет подсчитать число дней от любой датыPERIOD_DIFF (period1, period2)Находит разницу между периодами period1 и period2Выражается в месяцах. Необходимо, чтобы параметр период имел дату в формате YYYYMMTIMESTAMPDIFF (interval, date1, date2)Находит разницу между date1 и date2Выражается в тех единицах, что и interval, который соответствует аналогичному interval в TIMESTAMPADD
Функции вычисления разных значений в SQL Server и иной полезной информации
В SQL Server существуют специальные функции, с помощью которых можно найти много полезной информации. Часть их представлена в таблице:
ФункцияВозвращает значениеПримечаниеDATE (datetime)Текущей (Current) датыMissing TimeTIME (datetime)ВремениMissing DateTIMESTAMP (date)Полного значения даты вместе со временем DAY (date)/ DAYOFMONTH (date)Порядкового номера определенного дня в месяцеЯвляются синонимами, поэтому можно использовать любуюDAYNAME (date)Наименования дня недели DAYOFWEEK (date)Выражение дня в неделе в цифрахОтсчет начинается в воскресенье (1) и заканчивается в субботу (7)WEEKDAY (date)Цифрового значения дня в неделеОтсчет начинается в понедельник (0) и заканчивается в воскресенье (6)WEEK (date)Цифрового значения недели в годуВоскресенье – первый день неделиWEEKOFYEAR (datetime)Цифрового значения недели в годуПонедельник – первый день неделиMONTH (date)Цифрового значения месяца в году MONTHNAME (date)Наименования месяца QUARTER (date)Цифрового значения квартала в году YEAR (date)Года1000 – 9999DAYOFYEAR (date)Порядкового номера дня в календарном году HOUR (datetime)Часа MINUTE (datetime)Минут SECOND (datetime)Секунд EXTRACT (type FROM date)Части даты date, которая определена параметром type TO_DAYS (date)Даты, преобразованной в число дней, которые прошли с нулевого года FROM_DAYS (n)Число дней, которые прошли с нулевого годаЭта и предыдущая ф-ция взаимообратныUNIX_TIMESTAMP (date)Перевода даты в секунды, которые прошли с 01.01.1970г. FROM_UNIXTIME (n)Число секунд, которые прошли с 01.01.1970г., переведенных в датуЭта и предыдущая ф-ция взаимообратныTIME_TO_SEC (time)Перевода времени в число секунд, которые прошли с начала суток SEC_TO_TIME (n)Числа секунд, которые прошли с начала суток, конвертированные в привычный формат времениЭта и предыдущая ф-ция взаимообратныMAKEDATE (year, n)Даты, полученной путем преобразования года year и порядкового номера n дня в году
Возможные ошибки в работе
Рассмотрим самые распространенные ошибки, которые встречаются при работе с MS SQL дата и время в SQL Server.
1. Как хранятся значения?
Большинство ошибок связано с тем, что разработчики не до конца понимают способы хранения MS SQL даты и времени в MS SQL Server. Проблема в том, что даже документация не даст ответов на этот вопрос, т.к. не раскрывает эту тему полностью.
Некоторые T-SQL-разработчики, только начинающие свой профессиональный путь, полагают, что данные значения сохраняются в виде, привычном для человека («01-07-2021 11:15:22.167»). Однако это ошибочное мнение. Способ хранения MS SQL дата зависит от типа данных и может выражаться одним или несколькими целыми числами. Более понятно – дата/время хранится в виде чисел. Мнение, что они хранятся в форматированных строках – ошибочно.
Рассмотрим тип DATETIME. Согласно инструкций SQL Server данное значение сохраняется двумя целыми числами размеров в 8 байт (каждый по 4 байта):
- в первом – указывается день в диапазоне от 01.01.1753г. до 31.12.9999г.;
- во втором – указывается время в диапазоне от 00:00:00.000 до 23:59:59.997.
На это стоит обратить особое внимание. По умолчанию (нулевым днем) является значение 1 января 1900 года (1900-01-01 00:00:00.000). Отсюда следует, что даты раньше принятой, будут отрицательными числами, а позже – положительными. Так, 31.12.1899г. примет отрицательное значение (-1-й день), а 31.12.1900г. – положительное (364-й день).
Для хранения значения дата/время его нужно конвертировать в тип VARBINARY. А чтобы потом увидеть только дату либо только время, следует воспользоваться функцией SUBSTRING.
Проблемы могут возникнуть при указании различных языков (languages) и формата значений. Для корректной работы значение должно иметь структуру (Structure): YYYY-MM-DD HH при выбранном языке (language) British.
2. Помнить о тех, кто живет в иных географических широтах
Довольно распространенная ошибка – конфигурация установленного экземпляра SQL Server для обслуживания лишь локальных потребителей. Это может стать причиной проблем при работе с этим типом данных.
Как сказано выше, SQL Server сохраняет SQL даты в виде целых чисел. Однако частенько конвертирует их, переводя из целых чисел в формат строк, более привычных для человека. Потому в SQL Server принято несколько правил и параметров, которые и определяют порядок интерпретации значений строк даты/время.
3. Не позабыть о тех, кто живет в иных часовых поясах
При разработке приложений, которые охватывают не один регион в плане географии, разработчикам приходится сталкиваться с рядом проблем из-за часовых поясов. Неоднозначность таких типов данных – одна из них. Указанная SQL дата со временем практически не имеет смысла, пока не предоставлен механизм, обеспечивающий контекст.
Чаще всего это не является проблемой. Но она имеет особое значение для некоторых критических процессов, а также систем отслеживания и мониторинга. Даже когда подобные механизмы и существуют, разработчики определяют решения для учета часовых поясов.
Проблема получила решение, когда в SQL Server 2008 были внедрены:
- Data Type DATETIMEOFFSET. Его задача – упростить управление Date/Time. DATETIMEOFFSET в SQL Server сохраняет информацию, как и DATETIME2, а для часовых поясов (в отношении UTC) используется дополнительная пара байт;
- SWITCHOFFSET (функция системная), чтобы иметь возможность менять часовые пояса значений DATETIMEOFFSET в SQL Server.
Потому начиная с использования SQL Server 2008, проблема часовых поясов частична решена. Но даже эти версии не смогли устранить еще одной проблемы – переходов на зимнее и летнее время. При осуществлении таких переходов, данные будут отражаться не верно.
Проблема для разработчиков состоит в следующем:
- не все регионы осуществляют подобные переходы;
- в регионах, которые осуществляют переходы, это происходит в разное время;
- из-за изменения законодательной базы, определяющей данные переходы, регулярно изменяются числа, в которые они осуществляются. Далее это будет еще более непредсказуемо;
- часовые пояса могут достаточно серьезно отличаться как в странах, так и в одном регионе или государстве.
А значит, чтобы обеспечить получение надежных значений даты/времени нельзя рассчитывать лишь на DATETIMEOFFSET. Смена поясов и практически лишенный управления переход между зимним и летним временем, создают проблему. Создаваемые приложения и аналитика обязаны включать логику, требующуюся для обработки подобных задач.
4. Что выбрать: DATETIME2 или DATETIME?
Многие T-SQL-разработчики не часто пользуются DATETIME2. Хотя он был представлен еще в SQL Server 2008, они используют привычную DATETIME. Однако это не совсем оправданно, т.к. DATETIME2 обладает рядом достоинств:
- обладает более высокой точностью, т.к. для формата Time содержит после запятой до семи десятичных знаков, а DATETIME – лишь три. Здесь значения не округляются, а лишние обрезаются;
- позволяет контролировать точность Time, т.к. можно установить точность. Это позволит отрезать лишние знаки и сделать результат чище;
- если значение точности превышает 4, используется 8 байт, а если до 4, то занимает 6 байт. Это помогает экономить место, что особенно ценно при работе с огромными массивами данных;
- позволяет работать со значительно большим диапазоном дат (с 1 января 0001 года). В то время как в значение DATETIME можно лишь с 01.01.1753г.
Отметим, что при использовании старых приложений и систем, внедрение DATETIME2 может стать проблематичным. Но в процессе появления новых, при условии работы в SQL Server 2008 и старше, гораздо удобнее применять DATETIME2. Исключением могут стать технологии, не способные обработать его.
5. Игнорирование округления
Необходимо соблюдать осторожность при использовании таких Data Type, как DATETIME и SMALLDATETIME. Округления могут привести к потере значительных временных промежутков. Их использование может спровоцировать получение данных, способных неожиданно отразиться на результатах.
Гораздо надежнее использовать DATETIME2, когда это возможно.
6. Выполнение лишней работы
Чтобы из полной даты отсечь время, до SQL Server 2008 нужно было приложить усилия. Однако в версии 2008 может использоваться тип DATE. С его помощью достаточно просто конвертировать DATETIME2 в DATE и получить необходимый итог: одну только дату без упоминания времени.
Если необходимо оставить только временной показатель, то исходную информацию следует конвертировать в Data Type TIME. В этом случае оператор SELECT позволит получить только время. Использование таких типов данных, как DATE и TIME – наилучшие способы получения отдельных значений из первоначальных дата/время.
Для обнуления также можно использовать указанные выше DATEDIFF и DATEADD.
7. Непонимание принципов работы функции DATEDIFF
При использовании функции DATEDIFF стоит проявить осмотрительность. В противном случае не избежать получения достаточно странных показателей.
В процессе определения числа часов/ минут, прошедших между двумя показателями, полученный результат может отличаться от настоящего в разы. Так, при разнице в 1 секунду, SELECT DATEDIFF может вернуть разницу в одном часе или одной минуте. Такой же будет разница с днями, месяцами и т.д.
Основная проблема не в самой функции DATEDIFF. А в непонимании основ ее работы. SQL Server обращает внимание только на указанную даты, не более. Потому, при указании месяца, сопоставляться будут годы с месяцами, но никак не больше. Разница может составлять одну секунду, но SQL Server на это не обратить внимание.
Для обхода данной ошибки можно спуститься на один уровень глубже необходимого. Так, чтобы узнать, сколько минут между выбранной парой дат, следует вычислить сколько секунд, а результат поделить на 60:
SELECT DATEDIFF(ss, @a, @b)/60.0000
Работа с MS SQL дата не представляет сложности. Вместо вычисления периодов с помощью PHP, можно выполнять эти действия еще при выполнении SQL запросов. Это позволит быстрее получать требуемую выборку данных. Вспоминайте либо изучайте материал по MS SQL дата. При возникновении вопросов – обязательно задавайте их.
Также приглашаем на специальный курс по MS SQL в Otus.
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Особенности работы с MS SQL дата OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Microsoft SQL дата имеет огромное значение. Не зная ее основ, невозможно преуспеть ни в одном проекте. Предлагаем вспомнить основные термины, поговорить об особенностях работы с ними. Для тех, кто не знаком с этими понятиями в SQL Server, данная статья – прекрасный повод выучить их. Почему важно разбираться MS SQL дата применяется для хранения в базе" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/osobennosti-raboty-s-ms-sql-data/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/osobennosti-raboty-s-ms-sql-data\/#article","name":"\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 MS SQL \u0434\u0430\u0442\u0430 OTUS","headline":"\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 MS SQL \u0434\u0430\u0442\u0430","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2021\/07\/oj-1080x720-1-1.png","width":1080,"height":720},"datePublished":"2021-07-22T16:38:56+00:00","dateModified":"2021-07-22T16:38:57+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/osobennosti-raboty-s-ms-sql-data\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/osobennosti-raboty-s-ms-sql-data\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, MS SQL, SQL, \u0411\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/osobennosti-raboty-s-ms-sql-data\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/osobennosti-raboty-s-ms-sql-data\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/osobennosti-raboty-s-ms-sql-data\/#listItem","position":2,"name":"\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 MS SQL \u0434\u0430\u0442\u0430","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/osobennosti-raboty-s-ms-sql-data\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/osobennosti-raboty-s-ms-sql-data\/#webpage","url":"https:\/\/otus.ru\/journal\/osobennosti-raboty-s-ms-sql-data\/","name":"\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 MS SQL \u0434\u0430\u0442\u0430 OTUS","description":"Microsoft SQL \u0434\u0430\u0442\u0430 \u0438\u043c\u0435\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041d\u0435 \u0437\u043d\u0430\u044f \u0435\u0435 \u043e\u0441\u043d\u043e\u0432, \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0443\u0441\u043f\u0435\u0442\u044c \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u044b, \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438. \u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u044d\u0442\u0438\u043c\u0438 \u043f\u043e\u043d\u044f\u0442\u0438\u044f\u043c\u0438 \u0432 SQL Server, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u2013 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043f\u043e\u0432\u043e\u0434 \u0432\u044b\u0443\u0447\u0438\u0442\u044c \u0438\u0445. \u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u0430\u0436\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f MS SQL \u0434\u0430\u0442\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432 \u0431\u0430\u0437\u0435","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/osobennosti-raboty-s-ms-sql-data\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2021\/07\/oj-1080x720-1-1.png","@id":"https:\/\/otus.ru\/journal\/osobennosti-raboty-s-ms-sql-data\/#mainImage","width":1080,"height":720},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/osobennosti-raboty-s-ms-sql-data\/#mainImage"},"datePublished":"2021-07-22T16:38:56+00:00","dateModified":"2021-07-22T16:38:57+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/1610" /><link rel='shortlink' href='https://otus.ru/journal/?p=1610' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fosobennosti-raboty-s-ms-sql-data%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fosobennosti-raboty-s-ms-sql-data%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-1610 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-1610" class="the-post post-1610 post type-post status-publish format-standard has-post-thumbnail category-polza tag-ms-sql tag-sql tag-bazy-dannyh">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Особенности работы с MS SQL дата
</h1>
<a href="https://otus.ru/journal/osobennosti-raboty-s-ms-sql-data/" class="date-link" data-wpel-link="internal"><time class="post-date">22 июля, 2021</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1.png" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Особенности работы с MS SQL дата" title="Особенности работы с MS SQL дата" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1-270x180.png 270w" data-src="https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-1-1-770x515.png" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83_%D0%B2%D0%B0%D0%B6%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%B8%D1%80%D0%B0%D1%82%D1%8C%D1%81%D1%8F" title="Почему важно разбираться">Почему важно разбираться</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%B4%D0%B0%D1%82%D1%8B" title="Используемые функции даты">Используемые функции даты</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B" title="Операторы">Операторы</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%9F%D0%BE%D0%BF%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_ms_sql_%D0%B4%D0%B0%D1%82%D0%B0" title="Популярные операции с ms sql дата">Популярные операции с ms sql дата</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B0" title="Функции подсчета интервала">Функции подсчета интервала</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%80%D0%B0%D0%B7%D0%BD%D1%8B%D1%85_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B2_SQL_Server_%D0%B8_%D0%B8%D0%BD%D0%BE%D0%B9_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D0%BE%D0%B9_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8" title="Функции вычисления разных значений в SQL Server и иной полезной информации">Функции вычисления разных значений в SQL Server и иной полезной информации</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-7" href="#%D0%92%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D1%8B%D0%B5_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8_%D0%B2_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5" title="Возможные ошибки в работе">Возможные ошибки в работе</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="#1_%D0%9A%D0%B0%D0%BA_%D1%85%D1%80%D0%B0%D0%BD%D1%8F%D1%82%D1%81%D1%8F_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F" title="1. Как хранятся значения?">1. Как хранятся значения?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="#2_%D0%9F%D0%BE%D0%BC%D0%BD%D0%B8%D1%82%D1%8C_%D0%BE_%D1%82%D0%B5%D1%85_%D0%BA%D1%82%D0%BE_%D0%B6%D0%B8%D0%B2%D0%B5%D1%82_%D0%B2_%D0%B8%D0%BD%D1%8B%D1%85_%D0%B3%D0%B5%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%88%D0%B8%D1%80%D0%BE%D1%82%D0%B0%D1%85" title="2. Помнить о тех, кто живет в иных географических широтах">2. Помнить о тех, кто живет в иных географических широтах</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-10" href="#3_%D0%9D%D0%B5_%D0%BF%D0%BE%D0%B7%D0%B0%D0%B1%D1%8B%D1%82%D1%8C_%D0%BE_%D1%82%D0%B5%D1%85_%D0%BA%D1%82%D0%BE_%D0%B6%D0%B8%D0%B2%D0%B5%D1%82_%D0%B2_%D0%B8%D0%BD%D1%8B%D1%85_%D1%87%D0%B0%D1%81%D0%BE%D0%B2%D1%8B%D1%85_%D0%BF%D0%BE%D1%8F%D1%81%D0%B0%D1%85" title="3. Не позабыть о тех, кто живет в иных часовых поясах">3. Не позабыть о тех, кто живет в иных часовых поясах</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#4_%D0%A7%D1%82%D0%BE_%D0%B2%D1%8B%D0%B1%D1%80%D0%B0%D1%82%D1%8C_DATETIME2_%D0%B8%D0%BB%D0%B8_DATETIME" title="4. Что выбрать: DATETIME2 или DATETIME?">4. Что выбрать: DATETIME2 или DATETIME?</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#5_%D0%98%D0%B3%D0%BD%D0%BE%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%BA%D1%80%D1%83%D0%B3%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F" title="5. Игнорирование округления">5. Игнорирование округления</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#6_%D0%92%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B8%D1%88%D0%BD%D0%B5%D0%B9_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B" title="6. Выполнение лишней работы">6. Выполнение лишней работы</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-14" href="#7_%D0%9D%D0%B5%D0%BF%D0%BE%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D0%BE%D0%B2_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_DATEDIFF" title="7. Непонимание принципов работы функции DATEDIFF">7. Непонимание принципов работы функции DATEDIFF</a></li></ul></li></ul></nav></div>
<p>Microsoft SQL дата имеет огромное значение. Не зная ее основ, невозможно преуспеть ни в одном проекте. Предлагаем вспомнить основные термины, поговорить об особенностях работы с ними. Для тех, кто не знаком с этими понятиями в SQL Server, данная статья – прекрасный повод выучить их.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83_%D0%B2%D0%B0%D0%B6%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%B8%D1%80%D0%B0%D1%82%D1%8C%D1%81%D1%8F"></span>Почему важно разбираться<span class="ez-toc-section-end"></span></h2>
<p>MS SQL дата применяется для хранения в базе данных различный сведений, связанных с понятиями даты и времени. Таковыми являются сведения, когда добавлялись или удалялись какие-либо данные, регистрировались пользователи, осуществлялась авторизация и т.д.</p>
<p>Эти значения очень важны в MS SQL Server. Невозможно достичь успеха ни в одном проекте, не зная операторов MS SQL дата. С ними приходится работать во всех сервисах. Чаще всего, это определение временных интервалов между определенными датами.</p>
<p>В SQL существует большое количество функций, которые связаны с этим типом данных. Поговорим о них подробнее.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%B4%D0%B0%D1%82%D1%8B"></span>Используемые функции даты<span class="ez-toc-section-end"></span></h2>
<p>Воспользовавшись специальными функциями, можно получить текущие (Current) значения:</p>
<ul><li>NOW() – пары даты и времени;</li><li>CURDATE() — возвращает текущую дату (Missing Time);</li><li>CURTIME() — исключительно время (Missing Date).</li></ul>
<p>Вышеперечисленные функции чаще всего применяются для внесения записей в БД и сохранения даты, когда это было сделано. Хороший пример – при добавлении заметки на сайт необходимо сохранить, когда была размещена публикация.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B"></span>Операторы<span class="ez-toc-section-end"></span></h2>
<p>Для применения MS SQL дата необходимо разбираться в операторах:</p>
<p>Функции:</p>
<ul><li>DATE_FORMAT() — для разных способов вывода сведений о времени.</li></ul>
<p>Указывает из чего состоит:</p>
<ul><li>DATE() — из даты со временем.</li></ul>
<p>Возврат значений:</p>
<ul><li>DATEDIFF() — временного отрезка между определенными датами.</li><li>EXTRACT() — единого значения даты/времени.</li></ul>
<p>Выполнения действий:</p>
<ul><li>DATE_ADD() — добавления определенного количества единиц времени до выборки;</li><li>DATE_SUB() — вычисления указанного интервала от даты.</li></ul>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%BE%D0%BF%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_ms_sql_%D0%B4%D0%B0%D1%82%D0%B0"></span>Популярные операции с ms sql дата<span class="ez-toc-section-end"></span></h3>
<p>Рассмотрим наиболее популярные операции, осуществляемые с датами (Dates) и временем (Time):</p>
<figure class="wp-block-table"><table><tbody><tr><td>Функция</td><td>Выполняет действия</td><td>Примечание</td></tr><tr><td>ADDDATE (date, INTERVAL value)</td><td>Процесс сложения даты (date) и определенного значения (value)</td><td>Value – любая единица измерения времени (в годах, кварталах, месяцах, неделях, днях, часах, минутах, секундах)</td></tr><tr><td>SUBDATE (date, INTERVAL value)</td><td>Процесс вычитания из даты date значения value</td><td> </td></tr><tr><td>PERIOD_ADD (period, n)</td><td>Сложение значения period с n-ным количеством месяцев</td><td> </td></tr><tr><td>TIMESTAMPADD (interval, n, date)</td><td>Сложение даты date с n-ным временным интервалом interval</td><td>Interval – те же единицы измерения, что и для value в ADDDATE (включая микросекунды)</td></tr><tr><td>SUBTIME (date, time).</td><td>Вычитание из даты date определенного временного интервала time</td><td> </td></tr></tbody></table></figure>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82%D0%B0_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B2%D0%B0%D0%BB%D0%B0"></span>Функции подсчета интервала<span class="ez-toc-section-end"></span></h3>
<p>В таблице представлены специальные функции для нахождения интервалов между определенными датами:</p>
<figure class="wp-block-table"><table><tbody><tr><td>Функция</td><td>Выполняет действия</td><td>Примечание</td></tr><tr><td>TIMEDIFF (date1, date2)</td><td>Определяет разницу между date1 и date2</td><td>Результат представлен в часах, минутах, секундах</td></tr><tr><td>DATEDIFF (date1, date2)</td><td>Высчитывает разницу между date1 и date2</td><td>Результат выдает в днях. Она поможет подсчитать число дней от любой даты</td></tr><tr><td>PERIOD_DIFF (period1, period2)</td><td>Находит разницу между периодами period1 и period2</td><td>Выражается в месяцах. Необходимо, чтобы параметр период имел дату в формате YYYYMM</td></tr><tr><td>TIMESTAMPDIFF (interval, date1, date2)</td><td>Находит разницу между date1 и date2</td><td>Выражается в тех единицах, что и interval, который соответствует аналогичному interval в TIMESTAMPADD</td></tr></tbody></table></figure>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%80%D0%B0%D0%B7%D0%BD%D1%8B%D1%85_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B2_SQL_Server_%D0%B8_%D0%B8%D0%BD%D0%BE%D0%B9_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B7%D0%BD%D0%BE%D0%B9_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8"></span>Функции вычисления разных значений в SQL Server и иной полезной информации<span class="ez-toc-section-end"></span></h3>
<p>В SQL Server существуют специальные функции, с помощью которых можно найти много полезной информации. Часть их представлена в таблице:</p>
<figure class="wp-block-table"><table><tbody><tr><td>Функция</td><td>Возвращает значение</td><td>Примечание</td></tr><tr><td>DATE (datetime)</td><td>Текущей (Current) даты</td><td>Missing Time</td></tr><tr><td>TIME (datetime)</td><td>Времени</td><td>Missing Date</td></tr><tr><td>TIMESTAMP (date)</td><td>Полного значения даты вместе со временем</td><td> </td></tr><tr><td>DAY (date)/ DAYOFMONTH (date)</td><td>Порядкового номера определенного дня в месяце</td><td>Являются синонимами, поэтому можно использовать любую</td></tr><tr><td>DAYNAME (date)</td><td>Наименования дня недели</td><td> </td></tr><tr><td>DAYOFWEEK (date)</td><td>Выражение дня в неделе в цифрах</td><td>Отсчет начинается в воскресенье (1) и заканчивается в субботу (7)</td></tr><tr><td>WEEKDAY (date)</td><td>Цифрового значения дня в неделе</td><td>Отсчет начинается в понедельник (0) и заканчивается в воскресенье (6)</td></tr><tr><td>WEEK (date)</td><td>Цифрового значения недели в году</td><td>Воскресенье – первый день недели</td></tr><tr><td>WEEKOFYEAR (datetime)</td><td>Цифрового значения недели в году</td><td>Понедельник – первый день недели</td></tr><tr><td>MONTH (date)</td><td>Цифрового значения месяца в году</td><td> </td></tr><tr><td>MONTHNAME (date)</td><td>Наименования месяца</td><td> </td></tr><tr><td>QUARTER (date)</td><td>Цифрового значения квартала в году</td><td> </td></tr><tr><td>YEAR (date)</td><td>Года</td><td>1000 – 9999</td></tr><tr><td>DAYOFYEAR (date)</td><td>Порядкового номера дня в календарном году</td><td> </td></tr><tr><td>HOUR (datetime)</td><td>Часа</td><td> </td></tr><tr><td>MINUTE (datetime)</td><td>Минут</td><td> </td></tr><tr><td>SECOND (datetime)</td><td>Секунд</td><td> </td></tr><tr><td>EXTRACT (type FROM date)</td><td>Части даты date, которая определена параметром type</td><td> </td></tr><tr><td>TO_DAYS (date)</td><td>Даты, преобразованной в число дней, которые прошли с нулевого года</td><td> </td></tr><tr><td>FROM_DAYS (n)</td><td>Число дней, которые прошли с нулевого года</td><td>Эта и предыдущая ф-ция взаимообратны</td></tr><tr><td>UNIX_TIMESTAMP (date)</td><td>Перевода даты в секунды, которые прошли с 01.01.1970г.</td><td> </td></tr><tr><td>FROM_UNIXTIME (n)</td><td>Число секунд, которые прошли с 01.01.1970г., переведенных в дату</td><td>Эта и предыдущая ф-ция взаимообратны</td></tr><tr><td>TIME_TO_SEC (time)</td><td>Перевода времени в число секунд, которые прошли с начала суток</td><td> </td></tr><tr><td>SEC_TO_TIME (n)</td><td>Числа секунд, которые прошли с начала суток, конвертированные в привычный формат времени</td><td>Эта и предыдущая ф-ция взаимообратны</td></tr><tr><td>MAKEDATE (year, n)</td><td>Даты, полученной путем преобразования года year и порядкового номера n дня в году</td><td> </td></tr></tbody></table></figure>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D1%8B%D0%B5_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8_%D0%B2_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5"></span>Возможные ошибки в работе<span class="ez-toc-section-end"></span></h2>
<p>Рассмотрим самые распространенные ошибки, которые встречаются при работе с MS SQL дата и время в SQL Server.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="1_%D0%9A%D0%B0%D0%BA_%D1%85%D1%80%D0%B0%D0%BD%D1%8F%D1%82%D1%81%D1%8F_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F"></span>1. Как хранятся значения?<span class="ez-toc-section-end"></span></h3>
<p>Большинство ошибок связано с тем, что разработчики не до конца понимают способы хранения MS SQL даты и времени в MS SQL Server. Проблема в том, что даже документация не даст ответов на этот вопрос, т.к. не раскрывает эту тему полностью.</p>
<p>Некоторые T-SQL-разработчики, только начинающие свой профессиональный путь, полагают, что данные значения сохраняются в виде, привычном для человека («01-07-2021 11:15:22.167»). Однако это ошибочное мнение. Способ хранения MS SQL дата зависит от типа данных и может выражаться одним или несколькими целыми числами. Более понятно – дата/время хранится в виде чисел. Мнение, что они хранятся в форматированных строках – ошибочно.</p>
<p>Рассмотрим тип DATETIME. Согласно инструкций SQL Server данное значение сохраняется двумя целыми числами размеров в 8 байт (каждый по 4 байта):</p>
<ul><li>в первом – указывается день в диапазоне от 01.01.1753г. до 31.12.9999г.;</li><li>во втором – указывается время в диапазоне от 00:00:00.000 до 23:59:59.997.</li></ul>
<p>На это стоит обратить особое внимание. По умолчанию (нулевым днем) является значение 1 января 1900 года (1900-01-01 00:00:00.000). Отсюда следует, что даты раньше принятой, будут отрицательными числами, а позже – положительными. Так, 31.12.1899г. примет отрицательное значение (-1-й день), а 31.12.1900г. – положительное (364-й день).</p>
<p>Для хранения значения дата/время его нужно конвертировать в тип VARBINARY. А чтобы потом увидеть только дату либо только время, следует воспользоваться функцией SUBSTRING.</p>
<p>Проблемы могут возникнуть при указании различных языков (languages) и формата значений. Для корректной работы значение должно иметь структуру (Structure): YYYY-MM-DD HH при выбранном языке (language) British.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="2_%D0%9F%D0%BE%D0%BC%D0%BD%D0%B8%D1%82%D1%8C_%D0%BE_%D1%82%D0%B5%D1%85_%D0%BA%D1%82%D0%BE_%D0%B6%D0%B8%D0%B2%D0%B5%D1%82_%D0%B2_%D0%B8%D0%BD%D1%8B%D1%85_%D0%B3%D0%B5%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D1%88%D0%B8%D1%80%D0%BE%D1%82%D0%B0%D1%85"></span>2. Помнить о тех, кто живет в иных географических широтах<span class="ez-toc-section-end"></span></h3>
<p>Довольно распространенная ошибка – конфигурация установленного экземпляра SQL Server для обслуживания лишь локальных потребителей. Это может стать причиной проблем при работе с этим типом данных.</p>
<p>Как сказано выше, SQL Server сохраняет SQL даты в виде целых чисел. Однако частенько конвертирует их, переводя из целых чисел в формат строк, более привычных для человека. Потому в SQL Server принято несколько правил и параметров, которые и определяют порядок интерпретации значений строк даты/время.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="3_%D0%9D%D0%B5_%D0%BF%D0%BE%D0%B7%D0%B0%D0%B1%D1%8B%D1%82%D1%8C_%D0%BE_%D1%82%D0%B5%D1%85_%D0%BA%D1%82%D0%BE_%D0%B6%D0%B8%D0%B2%D0%B5%D1%82_%D0%B2_%D0%B8%D0%BD%D1%8B%D1%85_%D1%87%D0%B0%D1%81%D0%BE%D0%B2%D1%8B%D1%85_%D0%BF%D0%BE%D1%8F%D1%81%D0%B0%D1%85"></span>3. Не позабыть о тех, кто живет в иных часовых поясах<span class="ez-toc-section-end"></span></h3>
<p>При разработке приложений, которые охватывают не один регион в плане географии, разработчикам приходится сталкиваться с рядом проблем из-за часовых поясов. Неоднозначность таких типов данных – одна из них. Указанная SQL дата со временем практически не имеет смысла, пока не предоставлен механизм, обеспечивающий контекст.</p>
<p>Чаще всего это не является проблемой. Но она имеет особое значение для некоторых критических процессов, а также систем отслеживания и мониторинга. Даже когда подобные механизмы и существуют, разработчики определяют решения для учета часовых поясов.</p>
<p>Проблема получила решение, когда в SQL Server 2008 были внедрены:</p>
<ul><li>Data Type DATETIMEOFFSET. Его задача – упростить управление Date/Time. DATETIMEOFFSET в SQL Server сохраняет информацию, как и DATETIME2, а для часовых поясов (в отношении UTC) используется дополнительная пара байт;</li><li>SWITCHOFFSET (функция системная), чтобы иметь возможность менять часовые пояса значений DATETIMEOFFSET в SQL Server.</li></ul>
<p>Потому начиная с использования SQL Server 2008, проблема часовых поясов частична решена. Но даже эти версии не смогли устранить еще одной проблемы – переходов на зимнее и летнее время. При осуществлении таких переходов, данные будут отражаться не верно.</p>
<p>Проблема для разработчиков состоит в следующем:</p>
<ul><li>не все регионы осуществляют подобные переходы;</li><li>в регионах, которые осуществляют переходы, это происходит в разное время;</li><li>из-за изменения законодательной базы, определяющей данные переходы, регулярно изменяются числа, в которые они осуществляются. Далее это будет еще более непредсказуемо;</li><li>часовые пояса могут достаточно серьезно отличаться как в странах, так и в одном регионе или государстве.</li></ul>
<p>А значит, чтобы обеспечить получение надежных значений даты/времени нельзя рассчитывать лишь на DATETIMEOFFSET. Смена поясов и практически лишенный управления переход между зимним и летним временем, создают проблему. Создаваемые приложения и аналитика обязаны включать логику, требующуюся для обработки подобных задач.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="4_%D0%A7%D1%82%D0%BE_%D0%B2%D1%8B%D0%B1%D1%80%D0%B0%D1%82%D1%8C_DATETIME2_%D0%B8%D0%BB%D0%B8_DATETIME"></span>4. Что выбрать: DATETIME2 или DATETIME?<span class="ez-toc-section-end"></span></h3>
<p>Многие T-SQL-разработчики не часто пользуются DATETIME2. Хотя он был представлен еще в SQL Server 2008, они используют привычную DATETIME. Однако это не совсем оправданно, т.к. DATETIME2 обладает рядом достоинств:</p>
<ul><li>обладает более высокой точностью, т.к. для формата Time содержит после запятой до семи десятичных знаков, а DATETIME – лишь три. Здесь значения не округляются, а лишние обрезаются;</li><li>позволяет контролировать точность Time, т.к. можно установить точность. Это позволит отрезать лишние знаки и сделать результат чище;</li><li>если значение точности превышает 4, используется 8 байт, а если до 4, то занимает 6 байт. Это помогает экономить место, что особенно ценно при работе с огромными массивами данных;</li><li>позволяет работать со значительно большим диапазоном дат (с 1 января 0001 года). В то время как в значение DATETIME можно лишь с 01.01.1753г.</li></ul>
<p>Отметим, что при использовании старых приложений и систем, внедрение DATETIME2 может стать проблематичным. Но в процессе появления новых, при условии работы в SQL Server 2008 и старше, гораздо удобнее применять DATETIME2. Исключением могут стать технологии, не способные обработать его.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="5_%D0%98%D0%B3%D0%BD%D0%BE%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%BA%D1%80%D1%83%D0%B3%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F"></span>5. Игнорирование округления<span class="ez-toc-section-end"></span></h3>
<p>Необходимо соблюдать осторожность при использовании таких Data Type, как DATETIME и SMALLDATETIME. Округления могут привести к потере значительных временных промежутков. Их использование может спровоцировать получение данных, способных неожиданно отразиться на результатах.</p>
<p>Гораздо надежнее использовать DATETIME2, когда это возможно.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="6_%D0%92%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B8%D1%88%D0%BD%D0%B5%D0%B9_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B"></span>6. Выполнение лишней работы<span class="ez-toc-section-end"></span></h3>
<p>Чтобы из полной даты отсечь время, до SQL Server 2008 нужно было приложить усилия. Однако в версии 2008 может использоваться тип DATE. С его помощью достаточно просто конвертировать DATETIME2 в DATE и получить необходимый итог: одну только дату без упоминания времени.</p>
<p>Если необходимо оставить только временной показатель, то исходную информацию следует конвертировать в Data Type TIME. В этом случае оператор SELECT позволит получить только время. Использование таких типов данных, как DATE и TIME – наилучшие способы получения отдельных значений из первоначальных дата/время.</p>
<p>Для обнуления также можно использовать указанные выше DATEDIFF и DATEADD.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="7_%D0%9D%D0%B5%D0%BF%D0%BE%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D0%BE%D0%B2_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_DATEDIFF"></span>7. Непонимание принципов работы функции DATEDIFF<span class="ez-toc-section-end"></span></h3>
<p>При использовании функции DATEDIFF стоит проявить осмотрительность. В противном случае не избежать получения достаточно странных показателей.</p>
<p>В процессе определения числа часов/ минут, прошедших между двумя показателями, полученный результат может отличаться от настоящего в разы. Так, при разнице в 1 секунду, SELECT DATEDIFF может вернуть разницу в одном часе или одной минуте. Такой же будет разница с днями, месяцами и т.д.</p>
<p>Основная проблема не в самой функции DATEDIFF. А в непонимании основ ее работы. SQL Server обращает внимание только на указанную даты, не более. Потому, при указании месяца, сопоставляться будут годы с месяцами, но никак не больше. Разница может составлять одну секунду, но SQL Server на это не обратить внимание.</p>
<p>Для обхода данной ошибки можно спуститься на один уровень глубже необходимого. Так, чтобы узнать, сколько минут между выбранной парой дат, следует вычислить сколько секунд, а результат поделить на 60:</p>
<p>SELECT DATEDIFF(ss, @a, @b)/60.0000</p>
<p>Работа с MS SQL дата не представляет сложности. Вместо вычисления периодов с помощью PHP, можно выполнять эти действия еще при выполнении SQL запросов. Это позволит быстрее получать требуемую выборку данных. Вспоминайте либо изучайте материал по MS SQL дата. При возникновении вопросов – обязательно задавайте их.</p>
<figure class="wp-block-image size-large"><a href="https://otus.ru/lessons/subd/?utm_source=oj&utm_medium=affilate&utm_campaign=subd" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2021/07/SUBD_970x90-20219-543a9a-1.png" alt="Особенности работы с MS SQL дата" class="wp-image-1613" srcset="https://otus.ru/journal/wp-content/uploads/2021/07/SUBD_970x90-20219-543a9a-1.png 970w, https://otus.ru/journal/wp-content/uploads/2021/07/SUBD_970x90-20219-543a9a-1-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2021/07/SUBD_970x90-20219-543a9a-1-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2021/07/SUBD_970x90-20219-543a9a-1-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
<p>Также приглашаем на <a href="https://otus.ru/lessons/ms-sql-server-razrabotchik/?utm_source=oj&utm_medium=affilate&utm_campaign=sql" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">специальный курс по MS SQL в Otus<span class="wpel-icon wpel-image wpel-icon-6"></span></a>.</p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/ms-sql/" rel="tag" data-wpel-link="internal">MS SQL</a><a href="https://otus.ru/journal/tag/sql/" rel="tag" data-wpel-link="internal">SQL</a><a href="https://otus.ru/journal/tag/bazy-dannyh/" rel="tag" data-wpel-link="internal">Базы данных</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fosobennosti-raboty-s-ms-sql-data%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fosobennosti-raboty-s-ms-sql-data%2F&text=%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B%20%D1%81%20MS%20SQL%20%D0%B4%D0%B0%D1%82%D0%B0" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fosobennosti-raboty-s-ms-sql-data%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fosobennosti-raboty-s-ms-sql-data%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2021%2F07%2Foj-1080x720-1-1.png&description=%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B%20%D1%81%20MS%20SQL%20%D0%B4%D0%B0%D1%82%D0%B0" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/osobennosti-ms-sql-tablic/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/osobennosti-ms-sql-tablic/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Особенности MS SQL таблиц" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-5-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Особенности MS SQL таблиц" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/osobennosti-ms-sql-tablic/" data-wpel-link="internal">Особенности MS SQL таблиц</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/osobennosti-ms-sql-tablic/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2021-07-22T16:11:50+00:00">22 июля, 2021</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">9 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/osobennosti-rezervnogo-kopirovaniya-baz-dannyh-ms-sql/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/osobennosti-rezervnogo-kopirovaniya-baz-dannyh-ms-sql/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Особенности резервного копирования баз данных MS SQL" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-2-1-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-2-1-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-2-1-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-2-1-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-2-1-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-2-1-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-2-1-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-2-1.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2021/07/oj-1080x720-2-1-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Особенности резервного копирования баз данных MS SQL" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/osobennosti-rezervnogo-kopirovaniya-baz-dannyh-ms-sql/" data-wpel-link="internal">Особенности резервного копирования баз данных MS SQL</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/osobennosti-rezervnogo-kopirovaniya-baz-dannyh-ms-sql/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2021-07-22T16:46:29+00:00">22 июля, 2021</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">10 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/osobennosti-raboty-s-ms-sql-data\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Tue, 10 Mar 2026 15:08:17 GMT -->