|
|
|
|
#1 |
|
Ищущий знания...
|
Цитата:
Сообщение от S.Kuskov
Извините конечно, но я так и непонял, что такого делает этот прямой запрос, что нельзя сделать средствами аксапты?
Вы же вот это хотели получить? Или я что-то не понимаю? Код: ((T.Date > fromDate) || ((T.Date == fromDate) && (T.Time >= fromTime))) && ((T.Date < toDate) || ((T.Date == toDate) && (T.Time <= toTime))) ![]() Например, есть таблицы: Table1 с полями: FromDate, FromTime, ToDate, ToTime Table2 с полями: FromDate, FromTime, ToDate, ToTime известно значение Table2, нужно проверить есть ли пересекающиеся во времени строчки в Table1... вот такой случай решается в аксапте геморойно
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
| За это сообщение автора поблагодарили: nix0root (1). | |
|
|
#2 |
|
Участник
|
Ну даже с учетом поддержки 2009-й OR-ы, стоимость и время все равно остаются критичными
|
|
|
|
|
#3 |
|
Участник
|
Цитата:
Цитата:
X++: ((T1.fromDate < T2.toDate) || ((T1.fromDate == T2.toDate) && (T1.fromTime <= T2.toTime))) && ((T1.toDate > T2.fromDate) || ((T1.toDate == T2.fromDate) && (T1.toTime >= T2.fromTime))) P.S.: Накатал тут на коленке пару макросов для работы с датами и временем. Может кому пригодится. X++: #localmacro.lessOrEq
/* (%1) - Date_1 */
/* (%2) - Time_1 */
/* (%3) - Date_2 */
/* (%4) - Time_2 */
( ((%1) < (%3)) || ( ((%1) == (%3)) && ((%2) < (%4)) ) )
#endmacro
#localmacro.greatOrEq
/*(%1) - Date_1 */
/*(%2) - Time_1 */
/*(%3) - Date_2 */
/*(%4) - Time_2 */
( ((%1) > (%3)) || ( ((%1) == (%3)) && ((%2) > (%4)) ) )
#endmacro
#localmacro.dt
/* (%1) - Date */
/* (%2) - Time */
%1, %2
#endmacro
#localmacro.between
/* (%1) - DateFrom */
/* (%2) - TimeFrom */
/* (%3) - DateTo */
/* (%4) - TimeTo */
/* (%5) - Date */
/* (%6) - Time */
(#greatOrEq(#dt(%5, %6), #dt(%1, %2)) && #lessOrEq(#dt(%5, %6), #dt(%3, %4)))
#endmacro
#localmacro.cross
/* (%1) - DateFrom_1 */
/* (%2) - TimeFrom_1 */
/* (%3) - DateTo_1 */
/* (%4) - TimeTo_1 */
/* (%5) - DateFrom_2 */
/* (%6) - TimeFrom_2 */
/* (%7) - DateTo_2 */
/* (%8) - TimeTo_2 */
(#lessOrEq(#dt(%1, %2), #dt(%7, %8)) && #greatOrEq(#dt(%3, %4), #dt(%5, %6)))
#endmacro |
|
|
|
| За это сообщение автора поблагодарили: nix0root (1). | |
|
|
#4 |
|
Ищущий знания...
|
Цитата:
Сообщение от S.Kuskov
А неужели преоброзование типов работает быстрее пары лишних сравнений?
Вообще эта задача ничуть не сложнее предыдущей. В том смысле, что для её решения нужно то же число сравнений. X++: ((T1.fromDate < T2.toDate) || ((T1.fromDate == T2.toDate) && (T1.fromTime <= T2.toTime))) && ((T1.toDate > T2.fromDate) || ((T1.toDate == T2.fromDate) && (T1.toTime >= T2.fromTime))) ![]() согласитесть, что вот так, было бы более прозрачно и понятно: X++: if (T1.FromDateTime <= T2.ToDateTime && T1.ToDateTime >= T2.FromDateTime)
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#5 |
|
Участник
|
Цитата:
P.S.: А на мой вопрос (Дата и время в Axapta) есть у кого-нибудь ответ? |
|
|
|
|
#6 |
|
Участник
|
Цитата:
Сообщение от S.Kuskov
Согласен. Про это нет и речи. Я, всего лишь, против прямого SQL там, где это не нужно
P.S.: А на мой вопрос (Дата и время в Axapta) есть у кого-нибудь ответ? Более развернутый ответ: Не помню, надо искать пример и разбираться. Может как-то на досуге... |
|
|
|
|
#7 |
|
Moderator
|
Цитата:
Сообщение от nix0root
TO_DATE(TO_CHAR(T.DATE + (T.TIME/86400), 'DD.MM.YYYY HH24:MI:SS'), 'DD.MM.YYYY HH24:MI:SS') BETWEEN
TO_DATE(TO_CHAR(TO_DATE('01.01.2010', 'DD.MM.YYYY') + (60692/86400), 'DD.MM.YYYY HH24:MI:SS'), 'DD.MM.YYYY HH24:MI:SS') AND TO_DATE(TO_CHAR(TO_DATE('22.02.2010', 'DD.MM.YYYY') + (43200/86400), 'DD.MM.YYYY HH24:MI:SS'), 'DD.MM.YYYY HH24:MI:SS') Код: T.DATE + T.TIME/86400 BETWEEN
TO_DATE('01.01.2010', 'DD.MM.YYYY') + 60692/86400 AND
TO_DATE('22.02.2010', 'DD.MM.YYYY') + 43200/86400 |
|
|
|
| За это сообщение автора поблагодарили: alex55 (1). | |
|
|
#8 |
|
Участник
|
Цитата:
Сообщение от S.Kuskov
P.S.: А на мой вопрос (Дата и время в Axapta) есть у кого-нибудь ответ?
http://kashperuk.blogspot.com/2010/0...s-ax-2009.html |
|
|
|
| За это сообщение автора поблагодарили: S.Kuskov (1). | |
| Теги |
| ax2009, ax4.0, utcdatetime, время, дата |
|
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|