12.05.2009, 19:29 | #1 |
Участник
|
LIKE и OR в Query как-то можно объединить ?
Подозреваю что нет, интересно каким образом реализуете такую задачу:
X++: phoneQBR.value(strFmt('((%1 like "%3") || (%2 like "%3"))', fieldStr(smmBusRelTable, Phone), fieldStr(smmBusRelTable, CellularPhone), filterAnyPhoneStr))); Обрамлять звездочками с "==" тоже не работает .. Это один из нескольких поисковых фильтров по этой таблице/форме
__________________
_databaseTransDelete ... bl@$ ! |
|
12.05.2009, 21:27 | #2 |
MCITP
|
Цитата:
Сообщение от DTD
Подозреваю что нет, интересно каким образом реализуете такую задачу:
X++: phoneQBR.value(strFmt('((%1 like "%3") || (%2 like "%3"))', fieldStr(smmBusRelTable, Phone), fieldStr(smmBusRelTable, CellularPhone), filterAnyPhoneStr))); Обрамлять звездочками с "==" тоже не работает .. Это один из нескольких поисковых фильтров по этой таблице/форме
__________________
Zhirenkov Vitaly |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
13.05.2009, 11:36 | #3 |
MCITP
|
Можно ещё вот это Запрос по таблице параметров. и ещё кучу подобных... В частности внизу в похожих темах...
Основная суть - используйте поиск.
__________________
Zhirenkov Vitaly |
|
13.05.2009, 13:11 | #4 |
Участник
|
Цитата:
Сообщение от ZVV
Можно ещё вот это Запрос по таблице параметров. и ещё кучу подобных... В частности внизу в похожих темах...
Основная суть - используйте поиск. Запрос по таблице параметров. Вопрос был как вы обходите такое ограничение ? Пока не придумал ничего красивее чем в update обновлять специальное новое поле комбинацией значений полей по которым требуется OR, а потом его фильтровать обычным образом.
__________________
_databaseTransDelete ... bl@$ ! |
|
13.05.2009, 14:33 | #5 |
MCITP
|
Цитата:
Сообщение от DTD
Забыл упомянуть что SQL, AX4 SP2 ... ваши ссылки на "похожие темы" лишь подтверждают, что да, не работает такая комбинация на SQL.
Запрос по таблице параметров. Вопрос был как вы обходите такое ограничение ? Пока не придумал ничего красивее чем в update обновлять специальное новое поле комбинацией значений полей по которым требуется OR, а потом его фильтровать обычным образом. Попробуйте этот джоб: у меня работают оба варианта - у вас вероятно будет только 2-ой.. X++: static void Job12(Args _args) { Query q; QueryRun qr; QueryBuildDataSource qbds; QueryBuildRange qbr1; QueryBuildRange qbr2; InventTable InventTable; ; //1 q = New Query(); qbds = q.addDataSource(tableNum(InventTable)); qbr1 = qbds.addRange(fieldNum(InventTable, RecId)); qbr1.value(strFmt('((%4.%1 like "%3") || (%4.%2 like "%3"))', fieldStr(InventTable, ItemName), fieldStr(InventTable, NameAlias), "трусы*", qbds.name())); info(qbds.toString()); qr = New QueryRun(q); qr.next(); InventTable = qr.get(tableNum(InventTable)); info(InventTable.itemName); //2 q = New Query(); qbds = q.addDataSource(tableNum(InventTable)); qbr1 = qbds.addRange(fieldNum(InventTable, RecId)); qbr2 = qbds.addRange(fieldNum(InventTable, RecId)); qbr1.value(strFmt('(%1.%2 like "%3")', qbds.name(), fieldStr(InventTable, ItemName), "трусы*")); qbr2.value(strFmt('(%1.%2 like "%3")', qbds.name(), fieldStr(InventTable, NameAlias), "трусы*")); info(qbds.toString()); qr = New QueryRun(q); qr.next(); InventTable = qr.get(tableNum(InventTable)); info(InventTable.itemName); } X++: SELECT * FROM InventTable WHERE ((((InventTable_1.ItemName like "трусы*") || (InventTable_1.NameAlias like "трусы*")))) SELECT ..... FROM INVENTTABLE A WHERE ((SUBSTR(NLS_LOWER(DATAAREAID),1,3)=NLS_LOWER(:in1)/*'mil'*/) AND ((SUBSTR(NLS_LOWER(ITEMNAME),1,100) LIKE NLS_LOWER(:in2)/*'трусы*'*/ ESCAPE '\' ) OR (SUBSTR(NLS_LOWER(NAMEALIAS),1,50) LIKE NLS_LOWER(:in3)/*'*'*/ ESCAPE '\' ))) ORDER BY SUBSTR(NLS_LOWER(A.DATAAREAID),1,3),SUBSTR(NLS_LOWER(A.ITEMID),1,20) SELECT * FROM InventTable WHERE (((InventTable_1.ItemName like "трусы*")) OR ((InventTable_1.NameAlias like "трусы*"))) SELECT ..... FROM INVENTTABLE A WHERE ((SUBSTR(NLS_LOWER(DATAAREAID),1,3)=NLS_LOWER(:in1)/*'mil'*/) AND ((SUBSTR(NLS_LOWER(ITEMNAME),1,100) LIKE NLS_LOWER(:in2)/*'трусы*'*/ ESCAPE '\' ) OR (SUBSTR(NLS_LOWER(NAMEALIAS),1,50) LIKE NLS_LOWER(:in3)/*'*'*/ ESCAPE '\' ))) ORDER BY SUBSTR(NLS_LOWER(A.DATAAREAID),1,3),SUBSTR(NLS_LOWER(A.ITEMID),1,20)
__________________
Zhirenkov Vitaly |
|
13.05.2009, 15:00 | #6 |
Участник
|
Цитата:
Вопрос в принципе не на какой БД работает, с этим уже давно определились в предыдущих темах, а как народ обходит это.
__________________
_databaseTransDelete ... bl@$ ! |
|
13.05.2009, 15:24 | #7 |
MCITP
|
Жаль... я надеялся, хоть второй заработает...
Ну как обходят... переходят на "while select" или на 2009...
__________________
Zhirenkov Vitaly |
|
13.05.2009, 16:03 | #8 |
Участник
|
мда, оставлю тогда как есть, дополнительное "техническое" поле в стандартной таблице конечно немного грех, но имхо кошерней чем while select ..)
__________________
_databaseTransDelete ... bl@$ ! |
|
Теги |
like, запрос (query), критерии |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|