powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / как упростить?
13 сообщений из 13, страница 1 из 1
как упростить?
    #33214811
Фотография Dimyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть запрос который делает выборку по временному срезу, в клиенте два календаря задающие интервал их значение передается как параметр запроса. Я сделал вот такое условие:
Код: plaintext
(send_date between (select datetime(string(date(@fromDate),' ','00:00:00'))) and (select datetime(string(date(@beforeDate),' ','23:59:59'))))
но у меня такое ощущение что перемудрил, как упростить можно?
...
Рейтинг: 0 / 0
как упростить?
    #33214911
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, там не нужен подзапрос - select просто убери.
Во-вторых, лучше такое преобразование делат на клиенте или, в крайнем случае, ДО запроса. Это чтобы лучше работал оптимизатор. А в третьих, ты не указал , какую СУБД ты используешь, поэтому более точно ответить на твой вопрос сложновато.
...
Рейтинг: 0 / 0
как упростить?
    #33214923
Фотография Dimyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv пишет:
> не указал , какую СУБД ты используешь, поэтому более точно ответить на
> твой вопрос сложновато.
Ой извените ASA 9.02
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
как упростить?
    #33215188
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimyanесть запрос который делает выборку по временному срезу, в клиенте два календаря задающие интервал их значение передается как параметр запроса. Я сделал вот такое условие:
Код: plaintext
(send_date between (select datetime(string(date(@fromDate),' ','00:00:00'))) and (select datetime(string(date(@beforeDate),' ','23:59:59'))))
но у меня такое ощущение что перемудрил, как упростить можно?
Код: plaintext
1.
WHERE (send_date between @fromDate and @beforeDate)
если тип поля или параметров не совпадает, то соотвествующе лучше явно привести к параметры к типу поля.
...
Рейтинг: 0 / 0
как упростить?
    #33215423
Фотография Dimyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUS пишет:
> если тип поля или параметров не совпадает, то соотвествующе лучше явно
> привести к параметры к типу поля.
Тут основная задача то в том что задать правильный диапазон времени к
этим датам, т.е. в клиенте при выборе диапозона время не указывается, а
только дата, т.е. вот этим
Код: plaintext
string(date(@fromDate),' ','00:00:00')
я задаю начало и
Код: plaintext
string(date(@beforeDate),' ','23:59:59')
конец дня. Мне собственно именно это и важно, чтоб при указании даты с
клиента выбиралось все от начала дня @fromDate до конца дня @beforeDate.
Т.е. по сути если @fromDate="15.08.2005" и @beforeDate="15.08.2005", то
должны выбиратся все данные за этот день независимо от времени. Задать
тип date для этого поля я тоже не могу т.к. в других задачах пребуется
от этого поля именно timestamp
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
как упростить?
    #33215505
Фотография Рыжий Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так может лучше не заморачиваться с between и
сделать через <= и < ?

...
Рейтинг: 0 / 0
как упростить?
    #33215715
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если хочется сложно, то вот так:
Код: plaintext
1.
2.
3.
WHERE send_date BETWEEN 
    CONVERT(timestamp, @fromDate) AND
    SECONDS(@beforeDate,  86399 )
по простому лучше вот так:
Код: plaintext
1.
2.
3.
WHERE 
  send_date >= CONVERT(timestamp, @fromDate) AND
  send_date < CONVERT(timestamp, @beforeDate +  1 )
P.S. Явно приводить параметры к типу сравниваемого поля очень желательно, иначе вполне возможно оптимизатор проигрорирует существующие индексы на поле send_date.
...
Рейтинг: 0 / 0
как упростить?
    #33215749
Redbor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimyanдолжны выбиратся все данные за этот день независимо от времени. Так может быть тогда вообще не обращать внимания на время, а использовать в условии только даты?
...
Рейтинг: 0 / 0
как упростить?
    #33215782
Фотография Dimyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Redbor пишет:
> Так может быть тогда вообще не обращать внимания на время, а
> использовать в условии только даты?

Это и требуется. В данном условии посути побарабану время, просто надо
чтоб попало все что числится за этим днем, точнее за интервалом дней.
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
как упростить?
    #33215795
Redbor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так ASCRUS же ответил: ASCRUS
Код: plaintext
1.
WHERE (send_date between @fromDate and @beforeDate)
если тип поля или параметров не совпадает, то соотвествующе лучше явно привести к параметры к типу поля.
...
Рейтинг: 0 / 0
как упростить?
    #33215806
Фотография Dimyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Redbor пишет:
> Так ASCRUS же ответил:

Выше я обьяснил почему
WHERE (send_date between @fromDate and @beforeDate)
не подходит
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
как упростить?
    #33215898
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimyan wrote:

> WHERE (send_date between @fromDate and @beforeDate)
> не подходит

Блин, тебе же ответили уже. Ну или чуть-чуть по другому:

WHERE send_date >= @fromDate and send_date < dateadd(day, 1, @beforeDate)

Подразумевается, что @fromDate и @beforeDate - это даты, а send_date -
datetime.
Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
как упростить?
    #33216434
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000
Dimyan wrote:

> WHERE (send_date between @fromDate and @beforeDate)
> не подходит

Блин, тебе же ответили уже. Ну или чуть-чуть по другому:

WHERE send_date >= @fromDate and send_date < dateadd(day, 1, @beforeDate)

Подразумевается, что @fromDate и @beforeDate - это даты, а send_date -
datetime.
Posted via ActualForum NNTP Server 1.2
если хочется приводить к одному типу то есть еще функция CAST,
cast(@fromdate as timestamp)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / как упростить?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]