powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Datediff
6 сообщений из 6, страница 1 из 1
Datediff
    #39426166
Datediff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня в одном из запросов такой код (давным давно написанный), лишнее убрано.
Сейчас не могу понять, а что же он делает и как это сделано. Может кто сможет объяснить?

Код: vbnet
1.
2.
3.
4.
SELECT (DateDiff("d",Date(),[end_date])<=5 And DateDiff("d",Date(),[end_date])>=0)*-1 AS srok
FROM table
GROUP BY (DateDiff("d",Date(),[end_date])<=5 And DateDiff("d",Date(),[end_date])>=0)*-1
ORDER BY (DateDiff("d",Date(),[end_date])<=5 And DateDiff("d",Date(),[end_date])>=0)*-1 DESC;



А его надо переделать под SQL. Но когда не знаешь, что имелось в виду, то не знаешь, что нужно сделать.

Код: vbnet
1.
(DATEDIFF(day,GETDATE(),end_date)<=5 And DATEDIFF(day,GETDATE(),end_date)>=0)*-1 AS srok, 
...
Рейтинг: 0 / 0
Datediff
    #39426194
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Datediff, запрос вернёт 0 (не попадает) или 1 (попадает) в зависимости от того попадают ли даты завершения чего-то ( [end_date] ) в интервал 0-5 от текущего дня.
...
Рейтинг: 0 / 0
Datediff
    #39426238
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DateDiff считает разность двух дат в заданных единицах (дни).
Сравнение с числом даст True или False.
Логическое AND двух значений также даст True или False.
При умножении на число True будет конвертировано в -1, а False в 0.
Итого - если разность дат текущей и поля [end_date] находится в диапазоне от 0 до 5, в поле srok вернётся 1, иначе 0.
Группировка несколько равных srok "схлопнет" в один.
Итого - этот запрос просто даёт сведения о том, есть ли в таблице записи в диапазоне от 0 до 5 дней от текущей даты, и есть ли записи вне этого диапазона.
...
Рейтинг: 0 / 0
Datediff
    #39426300
Datediff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
\\\\ , Akina,

Да, сегодня бы по-другому было бы написано.
Спасибо огромное за такое подробное объяснение.

Код: vbnet
1.
Srok: IIf(DateDiff("d",Date(),[end_date]) Between 0 And 5,1,0)



Код: sql
1.
CASE WHEN DATEDIFF(day,GETDATE(),end_date) Between 0 And 5 THEN 1 ELSE 0 END Srok,
...
Рейтинг: 0 / 0
Datediff
    #39426323
Datediff
Код: vbnet
1.
Srok: IIf(DateDiff("d",Date(),[end_date]) Between 0 And 5,1,0)



Код: sql
1.
CASE WHEN DATEDIFF(day,GETDATE(),end_date) Between 0 And 5 THEN 1 ELSE 0 END Srok,

Вообще-то для вычисления периода в днях достаточно от одной даты отнять другую. Применение DateDiff здесь - архитектурное излишество.
...
Рейтинг: 0 / 0
Datediff
    #39426399
Datediff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),

А вы правы.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Datediff
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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