Конференция "Базы" » ADO+dbf - как будут называться функции в select [D7, dBase, FoxPro]
 
  • Anatoly Podgoretsky © (07.05.09 16:44) [20]
    Это тяжелое ограничение, выпадает конец года на интервал расчета. Но вообще то это терпимо.

    Я думаю, что и Оракле есть вариант получения DayOfYear, а с ним обычные скалярные вычисления.
  • sniknik © (07.05.09 16:58) [21]
    > Это тяжелое ограничение, выпадает конец года на интервал расчета.
    да ничего тяжелого, просто это второй вариант, чего 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 делать пакет команд, объявлять переменные, чтобы можно было в одном месте инициализировать было бы другое дело,  но чего нет того нет. лучше на клиенте условие проверить и выполнить нужный из запросов.
  • Раиса © (07.05.09 20:08) [22]
    sniknik ©   (07.05.09 16:58) [21]
    Спасибо огромное. А функция преобразования дат (типа cast as Date) всё же нужна (здесь она DateSerial называется). Спасибо еще за сам запрос - это то, что нужно.

    Интересно, какие еще функции есть?
  • sniknik © (07.05.09 20:47) [23]
    > Интересно, какие еще функции есть?
    я уже говорил где в справку смотреть, первым же постом. и раз уж у тебя прошло что то из нее ...
  • Раиса © (07.05.09 22:57) [24]
    sniknik ©   (07.05.09 20:47) [23]
    А всё же можно поподробнее - где и как искать справку по списку функций?
  • sniknik © (07.05.09 23:43) [25]
    подробнее,  что? как нажимать кнопку F1? а где, я по моему там же в первом посте и указал.
  • Раиса © (08.05.09 01:39) [26]
    Всё равно не поняла, где нажимать F1 (не в Access-е же, которого у меня, предположим,  нет на компе) ...
  • sniknik © (08.05.09 09:10) [27]
    > не в Access-е же
    почему же не в нем если в 1ом посте указан именно он?

    > которого у меня, предположим,  нет на компе
    значит на судьба.

    впрочем можно скопировать оттуда где есть только файлы хелпа, найти нужный и пользоваться "запуская" его. но это уже твои проблемы.
  • Anatoly Podgoretsky © (08.05.09 10:17) [28]

    > 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
  • sniknik © (08.05.09 10:34) [29]
    > Но это неправильное условие, надо просто два запроса
    почему это неправильное, оно выбирает то что нужно.
    то же самое что выберут 2 запроса с условиями "от и до нового года" и "от нового года и до".
    а если не видно разницы зачем писать больше?
  • sniknik © (08.05.09 10:41) [30]
    чтоб понятнее с раскрытыми переменными
    WHERE DateSerial(1000, Month(Date), Day(Date)) NOT BETWEEN '1000-01-05' AND '1000-12-29'
    выбираем все что не входит в период с конца по начало, а т.к. год у нас "усреднен" остается как раз нужное.
  • Anatoly Podgoretsky © (08.05.09 11:35) [31]
    > sniknik  (08.05.2009 10:41:30)  [30]

    Выберет все с 5 января по 29 декабря, а надо с 29 декабря по 31 декабря и с 1 января по 5 января
  • sniknik © (08.05.09 12:29) [32]
    > Выберет все с 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 можно заменить на явные > <, >= <=, что я обычно и делаю)
  • Anatoly Podgoretsky © (08.05.09 12:32) [33]
    На NOT то я и необратил внимания.
  • Анна (08.05.09 13:13) [34]
    Подскажите пож=та еще по этой теме:
    функции типа replace,substring,charindex необходимые для написания запросов к dbf файлам (через ADO) как называются? Я тоже, в свое время, не смогла найти.
  • Раиса © (08.05.09 13:21) [35]
    В справке по Access я нашла left, right и еще много всего, но аналогов replace, substring, charindex  не вижу. Наверное, они как-то совсем по-другому называются. Интересная функция PARTITION ...
 
Конференция "Базы" » ADO+dbf - как будут называться функции в select [D7, dBase, FoxPro]
Есть новые Нет новых   [134474   +35][b:0][p:0.001]