Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
0 / 0 / 0
Регистрация: 19.09.2024
Сообщений: 41

Работа с датами

07.08.2025, 22:57. Показов 2305. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане

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

пример 04.05.2025-20.05.2025 эта дата установлена
я хочу ввести дату с 01.05.2025 по 21-05-2025 должна образоваться ошибка из-за пересечения
если я введу с 01-05-2025 по 03-05-2025 или с 21-05-2025 по 31-5-2025 то они запишутся так как периоды не пересекаются и являются меньше или больше уже имеющихся
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.08.2025, 22:57
Ответы с готовыми решениями:

Работа с датами.
Доброго времени суток уважаемые форумчане! Как посчитать количество дней с "06,01,2010" по...

Работа с датами в отчетах! как реализовать?
Здравствуйте! По сути вопроса, маленькая проблемка. Существует отчет который опирается на запрос,...

Работа с датами?
Добрый день! Мне по работе нужна помощь. Есть таблица с сотрудниками, где хранятся данные о дате...

22
1322 / 540 / 112
Регистрация: 29.03.2016
Сообщений: 1,304
07.08.2025, 23:24
SQL
1
WHERE NOT ((ДатаНачалаНовая BETWEEN ДатаНачала AND ДатаОкончания) OR (ДатаОкончанияНовая BETWEEN ДатаНачала AND ДатаОкончания))
Не?

Добавлено через 2 минуты
Хотя НЕТ, так не отследит вложенные интервалы.
0
08.08.2025, 06:01

Не по теме:

Текст без знаков препинания становится невменяемой мешаниной слов безо всякого смысла. Вот вообще нет никакого желания додумывать самому, что хотел сказать художник своим произведением...

0
Эксперт MS Access
 Аватар для Eugene-LS
13172 / 5869 / 1504
Регистрация: 05.10.2016
Сообщений: 16,488
08.08.2025, 06:49
Цитата Сообщение от Daniyar114220 Посмотреть сообщение
как можно сделать проверку ..
Функция:
Visual Basic
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
32
33
34
35
36
37
38
39
40
41
42
Public Function DateRangesTest(vFixedRangeStart, vFixedRangeEnd, vDateTestStart, vDateTestEnd) As Boolean
' Индикатор вхождения одного диапазона в другой
' Возвращает: True | False
'---------------------------------------------------------------------------------------------------
' Аргументы:
'   vFixedRangeStart      = Дата начала фиксированного диапазона (с коим сравниваем)
'   vFixedRangeEnd        = Дата окончания фиксированного диапазона
'   vDateTestStart        = Дата начала тестируемого диапазона
'   vDateTestEnd          = Дата окончания тестируемого диапазона
'---------------------------------------------------------------------------------------------------
Const lNoValueEnd As Long = 999999 ' 999999 = 25.11.4637 !
Dim dRangeStart As Date, dRangeEnd As Date, dStart As Date, dEnd As Date, vVal
'---------------------------------------------------------------------------------------------------
On Error GoTo DateRangesTest_Err
 
' Опционально: Если диапазон отбора не задан
    'If IsNull(vFixedRangeStart) And IsNull(vFixedRangeEnd) Then GoTo DateRangesTest_End
' Опционально: Если Дата начала действия документа и Дата окончания не заданы!
    'If IsNull(vDateTestStart) And IsNull(vDateTestEnd) Then GoTo DateRangesTest_End
    
    dRangeStart = Nz(vFixedRangeStart, 0)
    dRangeEnd = Nz(vFixedRangeEnd, lNoValueEnd)
    dStart = Nz(vDateTestStart, 0)
    dEnd = Nz(vDateTestEnd, lNoValueEnd)
    
' Проверка на Старт после Финиша ! = меняем местами - иначе "не взлетит"!
    If dRangeStart > dRangeEnd Then
        vVal = dRangeStart
        dRangeStart = dRangeEnd
        dRangeEnd = vVal
    End If
    
    DateRangesTest = (dStart <= dRangeEnd) And (dEnd >= dRangeStart)
  
'---------------------------------------------------------------------------------------------------
DateRangesTest_End:
    Exit Function
 
DateRangesTest_Err:
    Err.Clear
    Resume DateRangesTest_End
End Function


Проверка работы:
Visual Basic
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
32
33
34
35
36
37
38
Dim dFixedRangeStart As Date, dFixedRangeEnd As Date
Dim vDateTestStart As Date, vDateTestEnd As Date
    
    dFixedRangeStart = DateValue("04.05.2025")
    dFixedRangeEnd = DateValue("20.05.2025")
    
    Debug.Print String(80, "-")
    Debug.Print "Диапазон для сверки: 04.05.2025 - 20.05.2025"
    
' 01.05.2025 - 21.05.2025 - Должна образоваться ошибка (If = True)
    vDateTestStart = DateValue("01.05.2025")
    vDateTestEnd = DateValue("21-05-2025")
    Debug.Print "01.05.2025 - 21.05.2025 - " & _
        DateRangesTest(dFixedRangeStart, dFixedRangeEnd, vDateTestStart, vDateTestEnd) & " - Перекрытие" ' = True
 
' 01.05.2025 - 03.05.2025 или ...
    vDateTestStart = DateValue("01.05.2025")
    vDateTestEnd = DateValue("03.05.2025")
    Debug.Print "01.05.2025 - 03.05.2025 - " & _
        DateRangesTest(dFixedRangeStart, dFixedRangeEnd, vDateTestStart, vDateTestEnd) & " - Нет пересечения" ' = False
 
' ...  или 21.05.2025 - 31.05.2025 ... являются меньше или больше уже имеющихся
    vDateTestStart = DateValue("21.05.2025")
    vDateTestEnd = DateValue("31.05.2025")
    Debug.Print "21.05.2025 - 31.05.2025 - " & _
        DateRangesTest(dFixedRangeStart, dFixedRangeEnd, vDateTestStart, vDateTestEnd) & " - Нет пересечения" ' = False
 
' Пересечение слева:
    vDateTestStart = DateValue("03.04.2025")
    vDateTestEnd = DateValue("06.05.2025")
    Debug.Print "03.04.2025 - 06.05.2025 - " & _
        DateRangesTest(dFixedRangeStart, dFixedRangeEnd, vDateTestStart, vDateTestEnd) & "  - Пересечение слева"  ' = True
    
' Пересечение справа:
    vDateTestStart = DateValue("19.05.2025")
    vDateTestEnd = DateValue("31.05.2025")
    Debug.Print "19.05.2025 - 31.05.2025 - " & _
        DateRangesTest(dFixedRangeStart, dFixedRangeEnd, vDateTestStart, vDateTestEnd) & "  - Пересечение справа" ' = True
Вернёт:
Visual Basic
1
2
3
4
5
6
7
--------------------------------------------------------------------------------
Диапазон для сверки: 04.05.2025 - 20.05.2025
01.05.2025 - 21.05.2025 - True - Перекрытие
01.05.2025 - 03.05.2025 - False - Нет пересечения
21.05.2025 - 31.05.2025 - False - Нет пересечения
03.04.2025 - 06.05.2025 - True  - Пересечение слева
19.05.2025 - 31.05.2025 - True  - Пересечение  справа


Добавлено через 9 минут
Цитата Сообщение от Jamaica Посмотреть сообщение
Не?
SQL
1
... WHERE NOT ((ДатаНачалаНовая <= ДатаОкончания) AND (ДатаОкончанияНовая >= ДатаНачала))
Добавлено через 8 минут

Не по теме:

Цитата Сообщение от D1973 Посмотреть сообщение
Текст без знаков препинания становится невменяемой мешаниной слов безо всякого смысла.
Согласен!
Daniyar114220, пост у вас далеко не первый, значит уже не волнуетесь. Так куда торопитесь???
Вас сложно читать - насилу понял что вы хотите.

0
08.08.2025, 06:53

Не по теме:

Цитата Сообщение от Eugene-LS Посмотреть сообщение
сложно читать - насилу понял что вы хотите
Добрый Вы человек. У меня доброты не хватает, вникать в смысл таких постов.

0
Эксперт MS Access
 Аватар для Eugene-LS
13172 / 5869 / 1504
Регистрация: 05.10.2016
Сообщений: 16,488
08.08.2025, 07:11
D1973 ... а если снова, то в следующий раз напишу ув. Daniyar114220 так:
Visual Basic
1
2
3
4
5
6
7
8
Public Function DateRangesTest(vFixedRangeStart, vFixedRangeEnd, vDateTestStart, vDateTestEnd) As Boolean
Const lNoValueEnd As Long = 999999: Dim dRangeStart As Date, dRangeEnd As Date, dStart As Date, dEnd As Date, vVal
dRangeStart = Nz(vFixedRangeStart, 0): dRangeEnd = Nz(vFixedRangeEnd, lNoValueEnd)
dStart = Nz(vDateTestStart, 0): dEnd = Nz(vDateTestEnd, lNoValueEnd)
If dRangeStart > dRangeEnd Then: vVal = dRangeStart: dRangeStart = dRangeEnd: dRangeEnd = vVal
If dStart > dEnd Then: vVal = dStart: dStart = dEnd:
DateRangesTest = (dStart <= dRangeEnd) And (dEnd >= dRangeStart)
End Function
... и представьте себе (!!!) - в таком виде работает!
0
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,405
Записей в блоге: 3
08.08.2025, 08:32
Цитата Сообщение от Eugene-LS Посмотреть сообщение
в следующий раз напишу

Цитата Сообщение от Eugene-LS Посмотреть сообщение
в таком виде работает!
да компилятору-то по барабану наши отступы и переносы строк. Он их, все одно, игнорирует...

Но вот люди - не компиляторы и, как мне кажется, отсутствие смыслового разбиения текста на части, используя знаки препинания, есть просто неуважение к тем, кто будет такие тексты читать.
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4159 / 2448 / 508
Регистрация: 13.12.2016
Сообщений: 8,319
Записей в блоге: 5
08.08.2025, 08:34
Цитата Сообщение от Eugene-LS Посмотреть сообщение
и представьте себе (!!!) - в таком виде работает!
еще и через Обфускацию пропустить и будет шедевр!
0
0 / 0 / 0
Регистрация: 19.09.2024
Сообщений: 41
08.08.2025, 08:44  [ТС]
Только как я понял что тут нужно самому задавать диапазон а как его брать уже из кода сотрудника и его дат которые уже там присутствуют
0
Эксперт MS Access
 Аватар для Eugene-LS
13172 / 5869 / 1504
Регистрация: 05.10.2016
Сообщений: 16,488
08.08.2025, 08:59
Цитата Сообщение от Daniyar114220 Посмотреть сообщение
а как его брать уже из кода сотрудника и его дат которые уже там присутствуют
Дату(ты) из кода сотрудника ???!!!
...
Вы не умеете использовать данные форм (таблиц) в качестве аргументов функций?
0
Эксперт MS Access
 Аватар для Eugene-LS
13172 / 5869 / 1504
Регистрация: 05.10.2016
Сообщений: 16,488
08.08.2025, 09:05
Цитата Сообщение от Daniyar114220 Посмотреть сообщение
а как его брать
Вах! Э... - Пример ниже ... Да!
Вложения
Тип файла: zip Диапазоны_v004.zip (42.9 Кб, 14 просмотров)
0
Мы один, давай на "ты"
3849 / 1393 / 345
Регистрация: 16.06.2016
Сообщений: 3,288
08.08.2025, 20:01
Daniyar114220, можно установить CONSTRAINT CHECK
коротенько

CHECK constraint — это тип ограничения целостности в SQL, который указывает требование, которое должно быть выполнено для каждой строки в таблице базы данных.
Он ограничивает диапазон или набор значений, которые можно вставить в столбец, и гарантирует, что данные, введённые в столбец, соответствуют определённому условию или правилу

пример решения -- checking_intervals.zip
0
Мы один, давай на "ты"
3849 / 1393 / 345
Регистрация: 16.06.2016
Сообщений: 3,288
08.08.2025, 20:04
ЗЫ. В примере считается пересечением в том числе если дата начала и/или конца совпадают у интервалов
0
0 / 0 / 0
Регистрация: 19.09.2024
Сообщений: 41
24.08.2025, 21:46  [ТС]
Подскажите а диапазоны он может брать для конкретного человека который уже есть в таблице?
0
 Аватар для VinniPuh
9131 / 6141 / 593
Регистрация: 27.03.2013
Сообщений: 20,006
26.08.2025, 17:43
Цитата Сообщение от Daniyar114220 Посмотреть сообщение
...а диапазоны он может брать для конкретного человека...
Запросом с группировкой ни разу не пользовались?
А так по умному, нужно выкладывать пример с десятком примерных данных, на котором вам расскажут, покажут, покритикуют, посоветуют, а то и скорее всего сделают нужную хотелку.
Создавать уже созданный пример, а потом несколько раз его переделывать под ваш пример, мало кто захочет.
0
0 / 0 / 0
Регистрация: 19.09.2024
Сообщений: 41
27.08.2025, 19:51  [ТС]
VinniPuh, в образце считается в ручную по датам так можно и глазами пересмотреть а если нужно проверить 2000 дат среди 100000 дат и пересекается ли у определенного человека суть в этом то вот смотрите есть код сотрудника и две даты в эксель, есть код сотрудника и 10 дат в аксес так вот как сделать что при вставки с эксель выбивало ошибку извините период был ранее
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
05.09.2025, 07:08
Цитата Сообщение от Daniyar114220 Посмотреть сообщение
датам так можно
Цитата Сообщение от Daniyar114220 Посмотреть сообщение
сделать что при вставки
Я есть тебя не понимайт даниияродинодинчетыредвадваноль
0
 Аватар для VinniPuh
9131 / 6141 / 593
Регистрация: 27.03.2013
Сообщений: 20,006
05.09.2025, 12:54
Цитата Сообщение от alvk Посмотреть сообщение
...Я есть тебя не понимайт...
Видимо ты плохо в Погранвойсках служил.
Я и то, почти больше половины понял.
Но без примера лень помогать по расчету выслуги, даже для военных как данный ТС.
Если уж ему лень выложить пример, то создавать пример с нуля, возможным помогающим и подавно в лом.
1
Эксперт MS Access
 Аватар для Eugene-LS
13172 / 5869 / 1504
Регистрация: 05.10.2016
Сообщений: 16,488
05.09.2025, 16:44
Цитата Сообщение от VinniPuh Посмотреть сообщение
Видимо ты плохо в Погранвойсках служил.
И тюркских наречий вы не знаете, а это основы английского и итальянского, французского языков.

Добавлено через 1 минуту
Daniyar114220, пишите на языке который вы знаете, Русский не ваш вариант ...
В Туркмении, например, в ходу, хорошо знакомый, северо-голландский - не стесняйтесь!
Южно -Голландский - это почти французский (азербайджанский) - сложнее, но разберёмся.

Азербайджанский = отец всех европейских языков!
0
0 / 0 / 0
Регистрация: 19.09.2024
Сообщений: 41
06.09.2025, 08:16  [ТС]
Вот пример базы извините немного проблематично выкладывать так как военные
Вложения
Тип файла: rar ОК пустая.rar (8.06 Мб, 28 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.09.2025, 08:16
Помогаю со студенческими работами здесь

Работа с Датами
Пытаюсь добавлять даты в следующем формате: #01/06/2004#. В базе первые два числа переставляются...

Работа с датами в Аксессе.
Задача следующая. Есть столбец, формата Дата/время. В нем хранится время начала работы. Дальше на...

Oracle 9i - работа с датами
Только начинаю работать с Oracle'ом. Так что заранее прошу прощения... НО: Вот к примеру кусочек...

Работа с датами
Привет друзья! Пару лет назад (только начинал осваивать ACCESS) в одной базе нужно было...

Работа с датами в SQL Server 2005
Привет всем... У мя тут есть такая проблема... Я написал следующий запрос: DECLARE @qwe...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru