powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Упростить выражение в where
14 сообщений из 14, страница 1 из 1
Упростить выражение в where
    #39792021
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(
CONVERT(DATETIME,(isnull(OpenDate),'9999-12-31',OpenDate)) != CONVERT(DATETIME, $$vExportDate)
and
CONVERT(DATETIME,(isnull(CloseDate),'9999-12-31',CloseDate)) >= CONVERT(DATETIME, $$vExportDate)
)
OR
(

(
to_date(OpenDate,'yyyy-mm-dd') = CONVERT(DATETIME, $$vExportDate) OR CONVERT(DATETIME, CloseDate) = CONVERT(DATETIME, $$vExportDate)
)
and
(
CONVERT(DATETIME, OpenDate)<> CONVERT(DATETIME, CloseDate)
or
OpenDate is null
or
CloseDate is null
)
)
OR
(
CONVERT(DATETIME, OpenDate) = CONVERT(DATETIME, $$vExportDate)
and
CONVERT(DATETIME, OpenDate) = CONVERT(DATETIME, CloseDate)
)

Как-нибудь можно упростить выражение или без вариантов?
...
Рейтинг: 0 / 0
Упростить выражение в where
    #39792023
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstu,

OR
(
CONVERT(DATETIME,(isnull(OpenDate),'9999-12-31',OpenDate)) != CONVERT(DATETIME, $$vExportDate)
and
CONVERT(DATETIME,(isnull(CloseDate),'9999-12-31',CloseDate)) >= CONVERT(DATETIME, $$vExportDate)
)
OR
(

(
to_date(OpenDate,'yyyy-mm-dd') = CONVERT(DATETIME, $$vExportDate) OR CONVERT(DATETIME, CloseDate) = CONVERT(DATETIME, $$vExportDate)
)
and
(
CONVERT(DATETIME, OpenDate)<> CONVERT(DATETIME, CloseDate)
or
OpenDate is null
or
CloseDate is null
)
)
OR
(
CONVERT(DATETIME, OpenDate) = CONVERT(DATETIME, $$vExportDate)
and
CONVERT(DATETIME, OpenDate) = CONVERT(DATETIME, CloseDate)
)
...
Рейтинг: 0 / 0
Упростить выражение в where
    #39792073
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstuКак-нибудь можно упростить выражение или без вариантов?Для начала надо убрать синтаксические ошибки: isnull(CloseDate)

Тем более, что такое выражение непонятно, "кто на ком стоял"?
Код: sql
1.
CONVERT(DATETIME,(isnull(OpenDate),'9999-12-31',OpenDate))



Далее, нужно убрать незначащие в выражении слова (CONVERT), что бы упростить понимание, добавить тег SRC, и после преобразования получится примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
(
	OpenDate = $$vExportDate
)
OR 
(
	CloseDate = $$vExportDate
	and
	OpenDate <> CloseDate
)
OR
(
	OpenDate != $$vExportDate
	and 
	CloseDate >= $$vExportDate
)	
...
Рейтинг: 0 / 0
Упростить выражение в where
    #39792180
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал через convert потому что так запрос выполняется
Не понятно только как упростить

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
alexeyvg,

AND 
(
CONVERT(char(10), a.OpenDate , 112)=$$vExportDate
OR
CONVERT(char(10), a.CloseDate , 112)= $$vExportDate
)
AND 
(
CONVERT(char(10), a.OpenDate , 112) !=CONVERT(char(10), a.CloseDate , 112)
OR a.OpenDate IS NULL
OR a.CloseDate IS NULL
)
OR
(
CONVERT(char(10), a.OpenDate , 112)=$$vExportDate
AND
CONVERT(char(10), a.OpenDate , 112)=CONVERT(char(10), a.CloseDate , 112)
)
OR 
(
CONVERT(char(10), a.OpenDate , 112) != $$vExportDate  
AND
CONVERT(char(10), a.CloseDate , 112) >= $$vExportDate
)
...
Рейтинг: 0 / 0
Упростить выражение в where
    #39792184
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstuНе понятно только как упроститьОдно же упрощение я показал.
И план написал, как его пытаться сделать.
Вот и упрощайте
...
Рейтинг: 0 / 0
Упростить выражение в where
    #39792299
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Не понятно куда делось условие OpenDate=CloseDate ?
...
Рейтинг: 0 / 0
Упростить выражение в where
    #39792418
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstualexeyvg,

Не понятно куда делось условие OpenDate=CloseDate ?Может, я как то не так преобразовал?

Сделаем выражение читабельным:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
(
	--	(1)
	OpenDate != $$vExportDate
	and 
	CloseDate >= $$vExportDate
)	
OR
(
	(
		--	(2)
		OpenDate = $$vExportDate 
		OR 
		CloseDate = $$vExportDate
	)
	and
	(
		--	(3)
		OpenDate <> CloseDate
		or
		OpenDate is null
		or
		CloseDate is null
	)
)
OR 
(
	--	(4)
	OpenDate = $$vExportDate
	and 
	OpenDate = CloseDate
)


Тогда условие (4) может поглотиться условием ((2) и (3)), если в (3) добавмить условие OpenDate = CloseDate
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
(
	--	(1)
	OpenDate != $$vExportDate
	and 
	CloseDate >= $$vExportDate
)	
OR
(
	(
		--	(2)
		OpenDate = $$vExportDate 
		OR 
		CloseDate = $$vExportDate
	)
	and
	(
		--	(3)
		OpenDate <> CloseDate
		or
		OpenDate = CloseDate
		or
		OpenDate is null
		or
		CloseDate is null
	)
)


И далее выражение (3) всегда истинно, при условии истинности (2)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
(
	--	(1)
	OpenDate != $$vExportDate
	and 
	CloseDate >= $$vExportDate
)	
OR
(
	--	(2)
	OpenDate = $$vExportDate 
	OR 
	CloseDate = $$vExportDate
)

...
Рейтинг: 0 / 0
Упростить выражение в where
    #39792489
x17.mstu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Для записей у которых CloseDate is null, а OpenDate=$$ExportDate (следуя вашему конечному полученному выражению)

Такие записи не попадут в выборку
...
Рейтинг: 0 / 0
Упростить выражение в where
    #39792507
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstualexeyvg,

Для записей у которых CloseDate is null, а OpenDate=$$ExportDate (следуя вашему конечному полученному выражению)

Такие записи не попадут в выборкуКак это???
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
(
	--	(1) - тут неважно, потому что выражение (2) равно TRUE
	OpenDate != $$vExportDate
	and 
	CloseDate >= $$vExportDate
)	
OR
(
	--	(2) - получаем, что выражение равно: TRUE ИЛИ FALSE = TRUE
	OpenDate = $$vExportDate -- Тут условие выполняется, значит, TRUE.
	OR -- Тут стоит ИЛИ
	CloseDate = $$vExportDate -- CloseDate = NULL , то есть выражение FALSE
)
...
Рейтинг: 0 / 0
Упростить выражение в where
    #39792512
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x17.mstualexeyvg,

Для записей у которых CloseDate is null, а OpenDate=$$ExportDate (следуя вашему конечному полученному выражению)

Такие записи не попадут в выборкуИ вообще, если сами даже не пытаетесь, то не думайте, пост-копи в код, и закрыть тикет!
...
Рейтинг: 0 / 0
Упростить выражение в where
    #39792845
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ему похоже нужен тупой between
Код: sql
1.
$$vExportDate BETWEEN ISNULL( [openDate], '19000101' ) AND ISNULL( [closeDate], '22000101' )
...
Рейтинг: 0 / 0
Упростить выражение в where
    #39792920
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан ДамировичЕму похоже нужен тупой between
Код: sql
1.
$$vExportDate BETWEEN ISNULL( [openDate], '19000101' ) AND ISNULL( [closeDate], '22000101' )

Там запутаннее, все записи с CloseDate >= $$vExportDate попадают, при условии, что OpenDate не равно $$vExportDate.

Поддерживаю, можно было бы попробовать рассказать, что нужно, языком бизнес-логики, без кода. Может, тогда получится написать условие эффективнее.
...
Рейтинг: 0 / 0
Упростить выражение в where
    #39792967
Wlr-l
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
x17.mstu,

Чтобы упростить логическое выражение нужно нужно не гадать, а:

1. Построить таблицу истинности.

2. Найти минимальную ДНФ.

Все эти действия хорошо формализованы и гарантированно приведут к успеху.
Любые другие умозаключения не дадут гарантии, что любой набор исходных данных даст нужный результат.
...
Рейтинг: 0 / 0
Упростить выражение в where
    #39793737
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wlr-lx17.mstu,
Чтобы упростить логическое выражение нужно нужно не гадать, а:
1. Построить таблицу истинности.
2. Найти минимальную ДНФ.
Все эти действия хорошо формализованы и гарантированно приведут к успеху.
Любые другие умозаключения не дадут гарантии, что любой набор исходных данных даст нужный результат.
Ну как тут не вспомнить анекдот про чукчу:
Ты, чукча, не мудри, ты пальцем покажи
:)
Если б ТС мог предлагаемое провернуть, он бы сюда не пришел...
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Упростить выражение в where
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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