loading..
Русский    English
03:45
листать

Функция DATEPART стр. 1

Синтаксис:

  1. DATEPART(datepart , date)

Эта функция возвращает целое число, представляющее собой указанную аргументом datepart часть заданной вторым аргументом даты (date).

Список допустимых значений аргумента datepart, описанный выше в данном разделе, дополняется еще одним значением

Datepart Допустимые сокращения
Weekday — день недели dw

Заметим, что возвращаемое функцией DATEPART значение в этом случае (номер дня недели) зависит от настроек, которые можно изменить с помощью оператора SET DATEFIRST, устанавливающего первый день недели. Для кого-то понедельник — день тяжелый, а для кого-то — воскресенье. Как и многие региональные настройки, по умолчанию это значение в  Cистема управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server зависит от выбранного языка.

Однако вернемся к примеру 7.1.3. В предположении, что время вылета/прилета является кратным минуте, мы можем его определить как сумму часов и минут. Поскольку функции даты/времени работают с целочисленными значениями, приведем результат к наименьшему интервалу — минутам. Итак, время вылета рейса 1123 в минутах:

Консоль
Выполнить
  1. SELECT DATEPART(hh, time_out)*60 + DATEPART(mi, time_out)
  2. FROM Trip
  3. WHERE trip_no = 1123;

и время прилета

Консоль
Выполнить
  1. SELECT DATEPART(hh, time_in)*60 + DATEPART(mi, time_in)
  2. FROM Trip
  3. WHERE trip_no = 1123;

Теперь мы должны сравнить, превышает ли время прилета время вылета. Если это так, следует вычесть из первого второе, чтобы получить продолжительность рейса. В противном случае к разности нужно добавить одни сутки (24*60 = 1440 минут).

Консоль
Выполнить
  1. SELECT CASE
  2. WHEN time_dep >= time_arr
  3. THEN time_arr - time_dep + 1440
  4. ELSE time_arr - time_dep
  5. END dur
  6. FROM (SELECT DATEPART(hh, time_out)*60 + DATEPART(mi, time_out) time_dep,
  7. DATEPART(hh, time_in)*60 + DATEPART(mi, time_in) time_arr
  8. FROM Trip
  9. WHERE trip_no = 1123
  10. ) tm;

Здесь, чтобы не повторять длинные конструкции в операторе CASE, использован подзапрос. Конечно, результат получился достаточно громоздким, зато абсолютно корректным в свете сделанных к этой задаче замечаний.

Пример 7.1.4

Определить дату и время вылета рейса 1123.

В таблице совершенных рейсов Pass_in_trip содержится только дата рейса, но не время, так как в соответствии с предметной областью каждый рейс может выполняться только один раз в день. Для решения этой задачи нужно к дате, хранящейся в таблице Pass_in_trip, добавить время из таблицы Trip

Консоль
Выполнить
  1. SELECT DISTINCT pt.trip_no, DATEADD(mi, DATEPART(hh,time_out)*60 +
  2. DATEPART(mi,time_out), date) [time]
  3. FROM Pass_in_trip pt JOIN
  4. Trip t ON pt.trip_no = t.trip_no
  5. WHERE t.trip_no = 1123;

Выполнив запрос, получим следующий результат

Trip_no Time
1123 2003-04-05 16:20:00.000
1123 2003-04-08 16:20:00.000

DISTINCT необходим здесь, чтобы исключить возможные дубликаты, поскольку номер и дата рейса дублируются в этой таблице для каждого пассажира данного рейса.

В ряде случаев функцию DATEPART можно заменить более простыми функциями. Вот они:

DAY(date) — целочисленное представление дня указанной даты. Эта функция эквивалентна функции DATEPART(dd, date).

MONTH(date) — целочисленное представление месяца указанной даты. Эта функция эквивалентна функции DATEPART(mm, date).

YEAR(date) — целочисленное представление года указанной даты. Эта функция эквивалентна функции DATEPART(yy, date).

Рекомендуемые упражнения: 43, 75, 110, 119

Bookmark and Share
Страницы: 1 2
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INNER JOIN insert INTERSECT IS NOT NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX MIN Больше тэгов
Учебник обновлялся
вчера
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100