powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Пересечение периодов
16 сообщений из 41, страница 2 из 2
Пересечение периодов
    #39766403
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKferzmikk,
Код: sql
1.
2.
discount_begin <= @discount_end AND
discount_end >= @discount_begin


Работает же. Нужные варианты отбирает (1,2,3,4) и не нужные не отбирает (5,6). Или это условие что то не учитывает?
...
Рейтинг: 0 / 0
Пересечение периодов
    #39766406
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

это загадка, что он хочет сделать...
...
Рейтинг: 0 / 0
Пересечение периодов
    #39766416
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

Все таки это математика. Давайте тогда уж разберем этот логический нюанс.
...
Рейтинг: 0 / 0
Пересечение периодов
    #39766527
Jaffar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот единственно правильное решение, все остальное в помойку.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
--- при этом предпологается что (@D1 <= @D2 ) и t.DT1 <= t.DT2
--- D1 и D2 - границы периода отчета
--- DT1 и DT2 - границы периода жизни чего либо
select t.*
from test_table t with(nolock) -- таблица с 
where
		IsNULL(t.DT1, '1900-01-01') <= IsNULL(@D2, '3000-01-01')
and		IsNULL(t.DT2, '3000-01-01') >= IsNULL(@D1, '1900-01-01')
...
Рейтинг: 0 / 0
Пересечение периодов
    #39766529
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaffarВот единственно правильное решение, все остальное в помойку.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
--- при этом предпологается что (@D1 <= @D2 ) и t.DT1 <= t.DT2
--- D1 и D2 - границы периода отчета
--- DT1 и DT2 - границы периода жизни чего либо
select t.*
from test_table t with(nolock) -- таблица с 
where
		IsNULL(t.DT1, '1900-01-01') <= IsNULL(@D2, '3000-01-01')
and		IsNULL(t.DT2, '3000-01-01') >= IsNULL(@D1, '1900-01-01')


Мой герой!
...
Рейтинг: 0 / 0
Пересечение периодов
    #39766535
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaffarВот единственно правильное решениеГениально!
Индексы - в топку!
nolock - наше все!
...
Рейтинг: 0 / 0
Пересечение периодов
    #39766538
tashkafox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikk,
От обратного: отбираем тех, которые не входят в период (это проще):
- те, кто закончился до начала периода
- и те, кто начался после конца периода
И добавляем логическое НЕ.
Код: sql
1.
not(discount_begin > @discount_end or discount_end < @discount_begin)


По правилу Де Морагана можно раскрыть формулу, или оставить так...
...
Рейтинг: 0 / 0
Пересечение периодов
    #39766545
Jaffar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

Учись студент, а то будешь всю жизнь ключи подавать...
...
Рейтинг: 0 / 0
Пересечение периодов
    #39766548
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tashkafoxferzmikk,
От обратного: отбираем тех, которые не входят в период (это проще):
- те, кто закончился до начала периода
- и те, кто начался после конца периода
И добавляем логическое НЕ.
Код: sql
1.
not(discount_begin > @discount_end or discount_end < @discount_begin)


По правилу Де Морагана можно раскрыть формулу, или оставить так...
и получить то что уже написано сутки назад
...
Рейтинг: 0 / 0
Пересечение периодов
    #39766549
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaffarTaPaK,

Учись студент, а то будешь всю жизнь ключи подавать...
Мой герой не очень умный оказывается
...
Рейтинг: 0 / 0
Пересечение периодов
    #39766552
Jaffar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

кэп, ну если нужные поля(DT1 и DT2 ) not NULL - тогда можно и убрать перестраховку,
а если нет - то терпите,
...
Рейтинг: 0 / 0
Пересечение периодов
    #39766559
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jaffarкэп, ну если нужные поля(DT1 и DT2 ) not NULL - тогда можно и убрать перестраховку,Тогда это таки не единственно правильное решение?
Jaffarа если нет - то терпите,А если нет - то надо мозги включать...
...
Рейтинг: 0 / 0
Пересечение периодов
    #39766567
Jaffar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

Кто бы говорил...
2 дня обсуждать то что не стоит выеденного яйца.
...
Рейтинг: 0 / 0
Пересечение периодов
    #39766571
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jaffar2 дня обсуждать то что не стоит выеденного яйца.Вот именно.
И тут пришел гениальный Jaffar и выдал эпическую чушь. Впрочем, как обычно...
...
Рейтинг: 0 / 0
Пересечение периодов
    #39766649
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой же сухой осадок-то остался?
Так что ли нужно?
Код: sql
1.
2.
3.
(d1 IS NULL OR @d2 IS NULL OR d1<=@d2)
AND
(d2 IS NULL OR @d1 IS NULL OR d2>=@d1)

Если придерживаться обозначений Jaffar 21796827
Исхожу из предположения, что для d1 и @d1 IS NULL - это "минус бесконечность", а для d2 и @d2 IS NULL - это "плюс бесконечность".

Я же так и не дождался ответа на вопрос "как интерпретируются NULLы"...
...
Рейтинг: 0 / 0
Пересечение периодов
    #39766670
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapferzmikkесли в полях [discount_begin] и/или [discount_end] присутствуют NULLИ как же интерпретируются NULLы?Это маловероятный случай, вдруг по каким то причинам заведено новое промо и не выбрана [discount_begin] и/или [discount_end]. Хотя в системе есть проверка перед записью. Но все равно актуально написать запрос так - вдруг NULL.
...
Рейтинг: 0 / 0
16 сообщений из 41, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Пересечение периодов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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