Что вместо CONVERT (TIME, x) Datepart? - PullRequest
1 голос
/ 20 декабря 2011

У меня сложный запрос к очень большой таблице.

Короче говоря, когда я использую время преобразования для выбора периода дня (скажем, 12-13h, преобразовывая его из строки даты-времени), запрос занимает несколько минут,вместо нескольких секунд без конвертации!

Итак, я попробовал datepart , и он работает хорошо, почти мгновенно, но проблема в том, как указать часы и минуты в одно и то же время?

Любое другое быстрое решение приветствуется.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 21 декабря 2011

Тем временем я придумал это:

DATEPART(HOUR, datetimecolumn)*100 + DATEPART(MINUTE, datetimecolumn)) between 1210 and 1540
1 голос
/ 21 декабря 2011

Вы можете использовать datePart, если хотите немного посчитать, как показано ниже:

  • 12: 10 = 12 * 60 + 10 = 730 минут
  • 15: 40 = 15 * 60 + 40 = 940 минут

    выберите * ..... где datepart (mi, datefield) между (12 * 60 + 10) и (15 * 60 + 40)

0 голосов
/ 20 декабря 2011

Вы можете получить GETTIME из следующей функции

alter function GetTimeOnly(@_DateTime DateTime)
returns datetime
as
    begin
    return dateadd(day, -datediff(day, 0, @_datetime), @_datetime)
    end
go

ИЛИ ВЫ МОЖЕТЕ ИМЕТЬ ВРЕМЯ ОТ ФУНКЦИИ КОНВЕРТА.

SELECT
CONVERT(VARCHAR(8),GETDATE(),108) AS HourMinuteSecond,
CONVERT(VARCHAR(8),GETDATE(),101) AS DateOnly
0 голосов
/ 20 декабря 2011

Если у вас есть постоянные периоды - то есть - всегда ежечасно и никаких плавающих периодов - вы можете ввести что-то вроде вычисляемого поля «порядковый номер периода», индексировать его и запросить его с precalculated periodзначение

ИЛИ

, если нет никаких постоянных периодов - попробуйте рассчитать правильные начальные и конечные значения до оператора SELECT и использовать их в запросе.

Имейте в видучто использование функций в предложении where - иногда плохая идея.Использование функций в предложении ORDER BY - всегда плохо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...