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