HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <ul><li><a>Почему важно разбираться</a></li>
1 <ul><li><a>Почему важно разбираться</a></li>
2 <li><a>Используемые функции даты</a></li>
2 <li><a>Используемые функции даты</a></li>
3 <li><a>Операторы</a><ul><li><a>Популярные операции с ms sql дата</a></li>
3 <li><a>Операторы</a><ul><li><a>Популярные операции с ms sql дата</a></li>
4 <li><a>Функции подсчета интервала</a></li>
4 <li><a>Функции подсчета интервала</a></li>
5 <li><a>Функции вычисления разных значений в SQL Server и иной полезной информации</a></li>
5 <li><a>Функции вычисления разных значений в SQL Server и иной полезной информации</a></li>
6 </ul></li>
6 </ul></li>
7 <li><a>Возможные ошибки в работе</a><ul><li><a>1. Как хранятся значения?</a></li>
7 <li><a>Возможные ошибки в работе</a><ul><li><a>1. Как хранятся значения?</a></li>
8 <li><a>2. Помнить о тех, кто живет в иных географических широтах</a></li>
8 <li><a>2. Помнить о тех, кто живет в иных географических широтах</a></li>
9 <li><a>3. Не позабыть о тех, кто живет в иных часовых поясах</a></li>
9 <li><a>3. Не позабыть о тех, кто живет в иных часовых поясах</a></li>
10 <li><a>4. Что выбрать: DATETIME2 или DATETIME?</a></li>
10 <li><a>4. Что выбрать: DATETIME2 или DATETIME?</a></li>
11 <li><a>5. Игнорирование округления</a></li>
11 <li><a>5. Игнорирование округления</a></li>
12 <li><a>6. Выполнение лишней работы</a></li>
12 <li><a>6. Выполнение лишней работы</a></li>
13 <li><a>7. Непонимание принципов работы функции DATEDIFF</a></li>
13 <li><a>7. Непонимание принципов работы функции DATEDIFF</a></li>
14 </ul></li>
14 </ul></li>
15 </ul><p>Microsoft SQL дата имеет огромное значение. Не зная ее основ, невозможно преуспеть ни в одном проекте. Предлагаем вспомнить основные термины, поговорить об особенностях работы с ними. Для тех, кто не знаком с этими понятиями в SQL Server, данная статья - прекрасный повод выучить их.</p>
15 </ul><p>Microsoft SQL дата имеет огромное значение. Не зная ее основ, невозможно преуспеть ни в одном проекте. Предлагаем вспомнить основные термины, поговорить об особенностях работы с ними. Для тех, кто не знаком с этими понятиями в SQL Server, данная статья - прекрасный повод выучить их.</p>
16 <h2>Почему важно разбираться</h2>
16 <h2>Почему важно разбираться</h2>
17 <p>MS SQL дата применяется для хранения в базе данных различный сведений, связанных с понятиями даты и времени. Таковыми являются сведения, когда добавлялись или удалялись какие-либо данные, регистрировались пользователи, осуществлялась авторизация и т.д.</p>
17 <p>MS SQL дата применяется для хранения в базе данных различный сведений, связанных с понятиями даты и времени. Таковыми являются сведения, когда добавлялись или удалялись какие-либо данные, регистрировались пользователи, осуществлялась авторизация и т.д.</p>
18 <p>Эти значения очень важны в MS SQL Server. Невозможно достичь успеха ни в одном проекте, не зная операторов MS SQL дата. С ними приходится работать во всех сервисах. Чаще всего, это определение временных интервалов между определенными датами.</p>
18 <p>Эти значения очень важны в MS SQL Server. Невозможно достичь успеха ни в одном проекте, не зная операторов MS SQL дата. С ними приходится работать во всех сервисах. Чаще всего, это определение временных интервалов между определенными датами.</p>
19 <p>В SQL существует большое количество функций, которые связаны с этим типом данных. Поговорим о них подробнее.</p>
19 <p>В SQL существует большое количество функций, которые связаны с этим типом данных. Поговорим о них подробнее.</p>
20 <h2>Используемые функции даты</h2>
20 <h2>Используемые функции даты</h2>
21 <p>Воспользовавшись специальными функциями, можно получить текущие (Current) значения:</p>
21 <p>Воспользовавшись специальными функциями, можно получить текущие (Current) значения:</p>
22 <ul><li>NOW() - пары даты и времени;</li>
22 <ul><li>NOW() - пары даты и времени;</li>
23 <li>CURDATE() - возвращает текущую дату (Missing Time);</li>
23 <li>CURDATE() - возвращает текущую дату (Missing Time);</li>
24 <li>CURTIME() - исключительно время (Missing Date).</li>
24 <li>CURTIME() - исключительно время (Missing Date).</li>
25 </ul><p>Вышеперечисленные функции чаще всего применяются для внесения записей в БД и сохранения даты, когда это было сделано. Хороший пример - при добавлении заметки на сайт необходимо сохранить, когда была размещена публикация.</p>
25 </ul><p>Вышеперечисленные функции чаще всего применяются для внесения записей в БД и сохранения даты, когда это было сделано. Хороший пример - при добавлении заметки на сайт необходимо сохранить, когда была размещена публикация.</p>
26 <h2>Операторы</h2>
26 <h2>Операторы</h2>
27 <p>Для применения MS SQL дата необходимо разбираться в операторах:</p>
27 <p>Для применения MS SQL дата необходимо разбираться в операторах:</p>
28 <p>Функции:</p>
28 <p>Функции:</p>
29 <ul><li>DATE_FORMAT() - для разных способов вывода сведений о времени.</li>
29 <ul><li>DATE_FORMAT() - для разных способов вывода сведений о времени.</li>
30 </ul><p>Указывает из чего состоит:</p>
30 </ul><p>Указывает из чего состоит:</p>
31 <ul><li>DATE() - из даты со временем.</li>
31 <ul><li>DATE() - из даты со временем.</li>
32 </ul><p>Возврат значений:</p>
32 </ul><p>Возврат значений:</p>
33 <ul><li>DATEDIFF() - временного отрезка между определенными датами.</li>
33 <ul><li>DATEDIFF() - временного отрезка между определенными датами.</li>
34 <li>EXTRACT() - единого значения даты/времени.</li>
34 <li>EXTRACT() - единого значения даты/времени.</li>
35 </ul><p>Выполнения действий:</p>
35 </ul><p>Выполнения действий:</p>
36 <ul><li>DATE_ADD() - добавления определенного количества единиц времени до выборки;</li>
36 <ul><li>DATE_ADD() - добавления определенного количества единиц времени до выборки;</li>
37 <li>DATE_SUB() - вычисления указанного интервала от даты.</li>
37 <li>DATE_SUB() - вычисления указанного интервала от даты.</li>
38 </ul><h3>Популярные операции с ms sql дата</h3>
38 </ul><h3>Популярные операции с ms sql дата</h3>
39 <p>Рассмотрим наиболее популярные операции, осуществляемые с датами (Dates) и временем (Time):</p>
39 <p>Рассмотрим наиболее популярные операции, осуществляемые с датами (Dates) и временем (Time):</p>
40 ФункцияВыполняет действияПримечание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 <h3>Функции подсчета интервала</h3>
40 ФункцияВыполняет действияПримечание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 <h3>Функции подсчета интервала</h3>
41 <p>В таблице представлены специальные функции для нахождения интервалов между определенными датами:</p>
41 <p>В таблице представлены специальные функции для нахождения интервалов между определенными датами:</p>
42 ФункцияВыполняет действияПримечание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<h3>Функции вычисления разных значений в SQL Server и иной полезной информации</h3>
42 ФункцияВыполняет действияПримечание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<h3>Функции вычисления разных значений в SQL Server и иной полезной информации</h3>
43 <p>В SQL Server существуют специальные функции, с помощью которых можно найти много полезной информации. Часть их представлена в таблице:</p>
43 <p>В SQL Server существуют специальные функции, с помощью которых можно найти много полезной информации. Часть их представлена в таблице:</p>
44 ФункцияВозвращает значениеПримечание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 дня в году <h2>Возможные ошибки в работе</h2>
44 ФункцияВозвращает значениеПримечание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 дня в году <h2>Возможные ошибки в работе</h2>
45 <p>Рассмотрим самые распространенные ошибки, которые встречаются при работе с MS SQL дата и время в SQL Server.</p>
45 <p>Рассмотрим самые распространенные ошибки, которые встречаются при работе с MS SQL дата и время в SQL Server.</p>
46 <h3>1. Как хранятся значения?</h3>
46 <h3>1. Как хранятся значения?</h3>
47 <p>Большинство ошибок связано с тем, что разработчики не до конца понимают способы хранения MS SQL даты и времени в MS SQL Server. Проблема в том, что даже документация не даст ответов на этот вопрос, т.к. не раскрывает эту тему полностью.</p>
47 <p>Большинство ошибок связано с тем, что разработчики не до конца понимают способы хранения MS SQL даты и времени в MS SQL Server. Проблема в том, что даже документация не даст ответов на этот вопрос, т.к. не раскрывает эту тему полностью.</p>
48 <p>Некоторые T-SQL-разработчики, только начинающие свой профессиональный путь, полагают, что данные значения сохраняются в виде, привычном для человека ("01-07-2021 11:15:22.167"). Однако это ошибочное мнение. Способ хранения MS SQL дата зависит от типа данных и может выражаться одним или несколькими целыми числами. Более понятно - дата/время хранится в виде чисел. Мнение, что они хранятся в форматированных строках - ошибочно.</p>
48 <p>Некоторые T-SQL-разработчики, только начинающие свой профессиональный путь, полагают, что данные значения сохраняются в виде, привычном для человека ("01-07-2021 11:15:22.167"). Однако это ошибочное мнение. Способ хранения MS SQL дата зависит от типа данных и может выражаться одним или несколькими целыми числами. Более понятно - дата/время хранится в виде чисел. Мнение, что они хранятся в форматированных строках - ошибочно.</p>
49 <p>Рассмотрим тип DATETIME. Согласно инструкций SQL Server данное значение сохраняется двумя целыми числами размеров в 8 байт (каждый по 4 байта):</p>
49 <p>Рассмотрим тип DATETIME. Согласно инструкций SQL Server данное значение сохраняется двумя целыми числами размеров в 8 байт (каждый по 4 байта):</p>
50 <ul><li>в первом - указывается день в диапазоне от 01.01.1753г. до 31.12.9999г.;</li>
50 <ul><li>в первом - указывается день в диапазоне от 01.01.1753г. до 31.12.9999г.;</li>
51 <li>во втором - указывается время в диапазоне от 00:00:00.000 до 23:59:59.997.</li>
51 <li>во втором - указывается время в диапазоне от 00:00:00.000 до 23:59:59.997.</li>
52 </ul><p>На это стоит обратить особое внимание. По умолчанию (нулевым днем) является значение 1 января 1900 года (1900-01-01 00:00:00.000). Отсюда следует, что даты раньше принятой, будут отрицательными числами, а позже - положительными. Так, 31.12.1899г. примет отрицательное значение (-1-й день), а 31.12.1900г. - положительное (364-й день).</p>
52 </ul><p>На это стоит обратить особое внимание. По умолчанию (нулевым днем) является значение 1 января 1900 года (1900-01-01 00:00:00.000). Отсюда следует, что даты раньше принятой, будут отрицательными числами, а позже - положительными. Так, 31.12.1899г. примет отрицательное значение (-1-й день), а 31.12.1900г. - положительное (364-й день).</p>
53 <p>Для хранения значения дата/время его нужно конвертировать в тип VARBINARY. А чтобы потом увидеть только дату либо только время, следует воспользоваться функцией SUBSTRING.</p>
53 <p>Для хранения значения дата/время его нужно конвертировать в тип VARBINARY. А чтобы потом увидеть только дату либо только время, следует воспользоваться функцией SUBSTRING.</p>
54 <p>Проблемы могут возникнуть при указании различных языков (languages) и формата значений. Для корректной работы значение должно иметь структуру (Structure): YYYY-MM-DD HH при выбранном языке (language) British.</p>
54 <p>Проблемы могут возникнуть при указании различных языков (languages) и формата значений. Для корректной работы значение должно иметь структуру (Structure): YYYY-MM-DD HH при выбранном языке (language) British.</p>
55 <h3>2. Помнить о тех, кто живет в иных географических широтах</h3>
55 <h3>2. Помнить о тех, кто живет в иных географических широтах</h3>
56 <p>Довольно распространенная ошибка - конфигурация установленного экземпляра SQL Server для обслуживания лишь локальных потребителей. Это может стать причиной проблем при работе с этим типом данных.</p>
56 <p>Довольно распространенная ошибка - конфигурация установленного экземпляра SQL Server для обслуживания лишь локальных потребителей. Это может стать причиной проблем при работе с этим типом данных.</p>
57 <p>Как сказано выше, SQL Server сохраняет SQL даты в виде целых чисел. Однако частенько конвертирует их, переводя из целых чисел в формат строк, более привычных для человека. Потому в SQL Server принято несколько правил и параметров, которые и определяют порядок интерпретации значений строк даты/время.</p>
57 <p>Как сказано выше, SQL Server сохраняет SQL даты в виде целых чисел. Однако частенько конвертирует их, переводя из целых чисел в формат строк, более привычных для человека. Потому в SQL Server принято несколько правил и параметров, которые и определяют порядок интерпретации значений строк даты/время.</p>
58 <h3>3. Не позабыть о тех, кто живет в иных часовых поясах</h3>
58 <h3>3. Не позабыть о тех, кто живет в иных часовых поясах</h3>
59 <p>При разработке приложений, которые охватывают не один регион в плане географии, разработчикам приходится сталкиваться с рядом проблем из-за часовых поясов. Неоднозначность таких типов данных - одна из них. Указанная SQL дата со временем практически не имеет смысла, пока не предоставлен механизм, обеспечивающий контекст.</p>
59 <p>При разработке приложений, которые охватывают не один регион в плане географии, разработчикам приходится сталкиваться с рядом проблем из-за часовых поясов. Неоднозначность таких типов данных - одна из них. Указанная SQL дата со временем практически не имеет смысла, пока не предоставлен механизм, обеспечивающий контекст.</p>
60 <p>Чаще всего это не является проблемой. Но она имеет особое значение для некоторых критических процессов, а также систем отслеживания и мониторинга. Даже когда подобные механизмы и существуют, разработчики определяют решения для учета часовых поясов.</p>
60 <p>Чаще всего это не является проблемой. Но она имеет особое значение для некоторых критических процессов, а также систем отслеживания и мониторинга. Даже когда подобные механизмы и существуют, разработчики определяют решения для учета часовых поясов.</p>
61 <p>Проблема получила решение, когда в SQL Server 2008 были внедрены:</p>
61 <p>Проблема получила решение, когда в SQL Server 2008 были внедрены:</p>
62 <ul><li>Data Type DATETIMEOFFSET. Его задача - упростить управление Date/Time. DATETIMEOFFSET в SQL Server сохраняет информацию, как и DATETIME2, а для часовых поясов (в отношении UTC) используется дополнительная пара байт;</li>
62 <ul><li>Data Type DATETIMEOFFSET. Его задача - упростить управление Date/Time. DATETIMEOFFSET в SQL Server сохраняет информацию, как и DATETIME2, а для часовых поясов (в отношении UTC) используется дополнительная пара байт;</li>
63 <li>SWITCHOFFSET (функция системная), чтобы иметь возможность менять часовые пояса значений DATETIMEOFFSET в SQL Server.</li>
63 <li>SWITCHOFFSET (функция системная), чтобы иметь возможность менять часовые пояса значений DATETIMEOFFSET в SQL Server.</li>
64 </ul><p>Потому начиная с использования SQL Server 2008, проблема часовых поясов частична решена. Но даже эти версии не смогли устранить еще одной проблемы - переходов на зимнее и летнее время. При осуществлении таких переходов, данные будут отражаться не верно.</p>
64 </ul><p>Потому начиная с использования SQL Server 2008, проблема часовых поясов частична решена. Но даже эти версии не смогли устранить еще одной проблемы - переходов на зимнее и летнее время. При осуществлении таких переходов, данные будут отражаться не верно.</p>
65 <p>Проблема для разработчиков состоит в следующем:</p>
65 <p>Проблема для разработчиков состоит в следующем:</p>
66 <ul><li>не все регионы осуществляют подобные переходы;</li>
66 <ul><li>не все регионы осуществляют подобные переходы;</li>
67 <li>в регионах, которые осуществляют переходы, это происходит в разное время;</li>
67 <li>в регионах, которые осуществляют переходы, это происходит в разное время;</li>
68 <li>из-за изменения законодательной базы, определяющей данные переходы, регулярно изменяются числа, в которые они осуществляются. Далее это будет еще более непредсказуемо;</li>
68 <li>из-за изменения законодательной базы, определяющей данные переходы, регулярно изменяются числа, в которые они осуществляются. Далее это будет еще более непредсказуемо;</li>
69 <li>часовые пояса могут достаточно серьезно отличаться как в странах, так и в одном регионе или государстве.</li>
69 <li>часовые пояса могут достаточно серьезно отличаться как в странах, так и в одном регионе или государстве.</li>
70 </ul><p>А значит, чтобы обеспечить получение надежных значений даты/времени нельзя рассчитывать лишь на DATETIMEOFFSET. Смена поясов и практически лишенный управления переход между зимним и летним временем, создают проблему. Создаваемые приложения и аналитика обязаны включать логику, требующуюся для обработки подобных задач.</p>
70 </ul><p>А значит, чтобы обеспечить получение надежных значений даты/времени нельзя рассчитывать лишь на DATETIMEOFFSET. Смена поясов и практически лишенный управления переход между зимним и летним временем, создают проблему. Создаваемые приложения и аналитика обязаны включать логику, требующуюся для обработки подобных задач.</p>
71 <h3>4. Что выбрать: DATETIME2 или DATETIME?</h3>
71 <h3>4. Что выбрать: DATETIME2 или DATETIME?</h3>
72 <p>Многие T-SQL-разработчики не часто пользуются DATETIME2. Хотя он был представлен еще в SQL Server 2008, они используют привычную DATETIME. Однако это не совсем оправданно, т.к. DATETIME2 обладает рядом достоинств:</p>
72 <p>Многие T-SQL-разработчики не часто пользуются DATETIME2. Хотя он был представлен еще в SQL Server 2008, они используют привычную DATETIME. Однако это не совсем оправданно, т.к. DATETIME2 обладает рядом достоинств:</p>
73 <ul><li>обладает более высокой точностью, т.к. для формата Time содержит после запятой до семи десятичных знаков, а DATETIME - лишь три. Здесь значения не округляются, а лишние обрезаются;</li>
73 <ul><li>обладает более высокой точностью, т.к. для формата Time содержит после запятой до семи десятичных знаков, а DATETIME - лишь три. Здесь значения не округляются, а лишние обрезаются;</li>
74 <li>позволяет контролировать точность Time, т.к. можно установить точность. Это позволит отрезать лишние знаки и сделать результат чище;</li>
74 <li>позволяет контролировать точность Time, т.к. можно установить точность. Это позволит отрезать лишние знаки и сделать результат чище;</li>
75 <li>если значение точности превышает 4, используется 8 байт, а если до 4, то занимает 6 байт. Это помогает экономить место, что особенно ценно при работе с огромными массивами данных;</li>
75 <li>если значение точности превышает 4, используется 8 байт, а если до 4, то занимает 6 байт. Это помогает экономить место, что особенно ценно при работе с огромными массивами данных;</li>
76 <li>позволяет работать со значительно большим диапазоном дат (с 1 января 0001 года). В то время как в значение DATETIME можно лишь с 01.01.1753г.</li>
76 <li>позволяет работать со значительно большим диапазоном дат (с 1 января 0001 года). В то время как в значение DATETIME можно лишь с 01.01.1753г.</li>
77 </ul><p>Отметим, что при использовании старых приложений и систем, внедрение DATETIME2 может стать проблематичным. Но в процессе появления новых, при условии работы в SQL Server 2008 и старше, гораздо удобнее применять DATETIME2. Исключением могут стать технологии, не способные обработать его.</p>
77 </ul><p>Отметим, что при использовании старых приложений и систем, внедрение DATETIME2 может стать проблематичным. Но в процессе появления новых, при условии работы в SQL Server 2008 и старше, гораздо удобнее применять DATETIME2. Исключением могут стать технологии, не способные обработать его.</p>
78 <h3>5. Игнорирование округления</h3>
78 <h3>5. Игнорирование округления</h3>
79 <p>Необходимо соблюдать осторожность при использовании таких Data Type, как DATETIME и SMALLDATETIME. Округления могут привести к потере значительных временных промежутков. Их использование может спровоцировать получение данных, способных неожиданно отразиться на результатах.</p>
79 <p>Необходимо соблюдать осторожность при использовании таких Data Type, как DATETIME и SMALLDATETIME. Округления могут привести к потере значительных временных промежутков. Их использование может спровоцировать получение данных, способных неожиданно отразиться на результатах.</p>
80 <p>Гораздо надежнее использовать DATETIME2, когда это возможно.</p>
80 <p>Гораздо надежнее использовать DATETIME2, когда это возможно.</p>
81 <h3>6. Выполнение лишней работы</h3>
81 <h3>6. Выполнение лишней работы</h3>
82 <p>Чтобы из полной даты отсечь время, до SQL Server 2008 нужно было приложить усилия. Однако в версии 2008 может использоваться тип DATE. С его помощью достаточно просто конвертировать DATETIME2 в DATE и получить необходимый итог: одну только дату без упоминания времени.</p>
82 <p>Чтобы из полной даты отсечь время, до SQL Server 2008 нужно было приложить усилия. Однако в версии 2008 может использоваться тип DATE. С его помощью достаточно просто конвертировать DATETIME2 в DATE и получить необходимый итог: одну только дату без упоминания времени.</p>
83 <p>Если необходимо оставить только временной показатель, то исходную информацию следует конвертировать в Data Type TIME. В этом случае оператор SELECT позволит получить только время. Использование таких типов данных, как DATE и TIME - наилучшие способы получения отдельных значений из первоначальных дата/время.</p>
83 <p>Если необходимо оставить только временной показатель, то исходную информацию следует конвертировать в Data Type TIME. В этом случае оператор SELECT позволит получить только время. Использование таких типов данных, как DATE и TIME - наилучшие способы получения отдельных значений из первоначальных дата/время.</p>
84 <p>Для обнуления также можно использовать указанные выше DATEDIFF и DATEADD.</p>
84 <p>Для обнуления также можно использовать указанные выше DATEDIFF и DATEADD.</p>
85 <h3>7. Непонимание принципов работы функции DATEDIFF</h3>
85 <h3>7. Непонимание принципов работы функции DATEDIFF</h3>
86 <p>При использовании функции DATEDIFF стоит проявить осмотрительность. В противном случае не избежать получения достаточно странных показателей.</p>
86 <p>При использовании функции DATEDIFF стоит проявить осмотрительность. В противном случае не избежать получения достаточно странных показателей.</p>
87 <p>В процессе определения числа часов/ минут, прошедших между двумя показателями, полученный результат может отличаться от настоящего в разы. Так, при разнице в 1 секунду, SELECT DATEDIFF может вернуть разницу в одном часе или одной минуте. Такой же будет разница с днями, месяцами и т.д.</p>
87 <p>В процессе определения числа часов/ минут, прошедших между двумя показателями, полученный результат может отличаться от настоящего в разы. Так, при разнице в 1 секунду, SELECT DATEDIFF может вернуть разницу в одном часе или одной минуте. Такой же будет разница с днями, месяцами и т.д.</p>
88 <p>Основная проблема не в самой функции DATEDIFF. А в непонимании основ ее работы. SQL Server обращает внимание только на указанную даты, не более. Потому, при указании месяца, сопоставляться будут годы с месяцами, но никак не больше. Разница может составлять одну секунду, но SQL Server на это не обратить внимание.</p>
88 <p>Основная проблема не в самой функции DATEDIFF. А в непонимании основ ее работы. SQL Server обращает внимание только на указанную даты, не более. Потому, при указании месяца, сопоставляться будут годы с месяцами, но никак не больше. Разница может составлять одну секунду, но SQL Server на это не обратить внимание.</p>
89 <p>Для обхода данной ошибки можно спуститься на один уровень глубже необходимого. Так, чтобы узнать, сколько минут между выбранной парой дат, следует вычислить сколько секунд, а результат поделить на 60:</p>
89 <p>Для обхода данной ошибки можно спуститься на один уровень глубже необходимого. Так, чтобы узнать, сколько минут между выбранной парой дат, следует вычислить сколько секунд, а результат поделить на 60:</p>
90 <p>SELECT DATEDIFF(ss, @a, @b)/60.0000</p>
90 <p>SELECT DATEDIFF(ss, @a, @b)/60.0000</p>
91 <p>Работа с MS SQL дата не представляет сложности. Вместо вычисления периодов с помощью PHP, можно выполнять эти действия еще при выполнении SQL запросов. Это позволит быстрее получать требуемую выборку данных. Вспоминайте либо изучайте материал по MS SQL дата. При возникновении вопросов - обязательно задавайте их.</p>
91 <p>Работа с MS SQL дата не представляет сложности. Вместо вычисления периодов с помощью PHP, можно выполнять эти действия еще при выполнении SQL запросов. Это позволит быстрее получать требуемую выборку данных. Вспоминайте либо изучайте материал по MS SQL дата. При возникновении вопросов - обязательно задавайте их.</p>
92 <a></a><p>Также приглашаем на <a>специальный курс по MS SQL в Otus</a>.</p>
92 <a></a><p>Также приглашаем на <a>специальный курс по MS SQL в Otus</a>.</p>
93  
93