-
Это тяжелое ограничение, выпадает конец года на интервал расчета. Но вообще то это терпимо.
Я думаю, что и Оракле есть вариант получения DayOfYear, а с ним обычные скалярные вычисления.
-
> Это тяжелое ограничение, выпадает конец года на интервал расчета. да ничего тяжелого, просто это второй вариант, чего jet (ветвлений из запросов) не позволяет.
вот вариант второго условия для того когда начало позже чем конец... переделка из [13] SELECT * FROM Table1 WHERE DateSerial(1000, Month(Date), Day(Date)) NOT BETWEEN :End AND :Start и все.
конечно можно было бы и 2 условия сделать с "переключателем" какому отрабатывать, но тогда кучу параметров придется вводить (повторять 3 раза по 2 т.е. 6) будет неуклюже, но если только как пример SELECT * FROM Table1 WHERE iif(:Start < :End, DateSerial(1000, Month(Date), Day(Date)) BETWEEN :Start AND :End, DateSerial(1000, Month(Date), Day(Date)) NOT BETWEEN :End AND :Start) если бы можно было в jet как и в mssql делать пакет команд, объявлять переменные, чтобы можно было в одном месте инициализировать было бы другое дело, но чего нет того нет. лучше на клиенте условие проверить и выполнить нужный из запросов.
-
sniknik © (07.05.09 16:58) [21] Спасибо огромное. А функция преобразования дат (типа cast as Date) всё же нужна (здесь она DateSerial называется). Спасибо еще за сам запрос - это то, что нужно.
Интересно, какие еще функции есть?
-
> Интересно, какие еще функции есть? я уже говорил где в справку смотреть, первым же постом. и раз уж у тебя прошло что то из нее ...
-
sniknik © (07.05.09 20:47) [23] А всё же можно поподробнее - где и как искать справку по списку функций?
-
подробнее, что? как нажимать кнопку F1? а где, я по моему там же в первом посте и указал.
-
Всё равно не поняла, где нажимать F1 (не в Access-е же, которого у меня, предположим, нет на компе) ...
-
> не в Access-е же почему же не в нем если в 1ом посте указан именно он?
> которого у меня, предположим, нет на компе значит на судьба.
впрочем можно скопировать оттуда где есть только файлы хелпа, найти нужный и пользоваться "запуская" его. но это уже твои проблемы.
-
> WHERE iif(:Start < :End, > DateSerial(1000, Month(Date), Day(Date)) BETWEEN :Start > AND :End, > DateSerial(1000, Month(Date), Day(Date)) NOT BETWEEN :End > AND :Start)
Но это неправильное условие, надо просто два запроса
запрос 1 условие 1 union запрос 2 условие 2
-
> Но это неправильное условие, надо просто два запроса почему это неправильное, оно выбирает то что нужно. то же самое что выберут 2 запроса с условиями "от и до нового года" и "от нового года и до". а если не видно разницы зачем писать больше?
-
чтоб понятнее с раскрытыми переменными WHERE DateSerial(1000, Month(Date), Day(Date)) NOT BETWEEN '1000-01-05' AND '1000-12-29' выбираем все что не входит в период с конца по начало, а т.к. год у нас "усреднен" остается как раз нужное.
-
> sniknik (08.05.2009 10:41:30) [30]
Выберет все с 5 января по 29 декабря, а надо с 29 декабря по 31 декабря и с 1 января по 5 января
-
> Выберет все с 5 января по 29 декабря, а надо с 29 декабря по 31 декабря и с 1 января по 5 января WHERE DateSerial(1000, Month(Date), Day(Date)) NOT BETWEEN '1000-01-05' AND '1000-12-29'
выберет именно с 29декабра по 5января. (ну может из-за неопределенности включения в результат границ условий и будут траблы, но суть от этого не страдает, а BETWEEN можно заменить на явные > <, >= <=, что я обычно и делаю)
-
На NOT то я и необратил внимания.
-
Подскажите пож=та еще по этой теме: функции типа replace,substring,charindex необходимые для написания запросов к dbf файлам (через ADO) как называются? Я тоже, в свое время, не смогла найти.
-
В справке по Access я нашла left, right и еще много всего, но аналогов replace, substring, charindex не вижу. Наверное, они как-то совсем по-другому называются. Интересная функция PARTITION ...
|