Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
16.07.2010, 12:05
|
|||
|---|---|---|---|
|
|||
Порядок выполнения логических операций |
|||
|
#18+
DB2 9.5 LUW Есть табличка с двумя столбцами С1 - VARCHAR, C2 - INTEGER. Нужно посчитать все строки, в котором на позиции C2 в строке С1 находится символ 'X'. При этом значение С2 может быть меньше нуля или больше длины С1 - такие строки считать не надо. Простейший запрос: SELECT COUNT(C1) where SUBSTR (C1, C2,1) = 'X' and C2>0 and C2<=LENGTH(C1) Проблема: в тех строках, где С2 выходит за установленные пределы, SUBSTR все равно пытается считаться и получаем ошибку. Изменяю заппрос, ставлю скобки, надеюсь, что проверка С2 произойдет раньше SELECT COUNT(C1) where (C2>0 and C2<=LENGTH(C1)) and SUBSTR (C1, C2,1) = 'X' Но... оптимизатор слишком умный и все равно проверяет SUBSTR сначала. На самом деле табличка сложнее и С2 - вычисляемый параметр, вместо = 'X' реально IN (....), еще есть GROUP BY ROLLUP, но смысл проблемы именно такой. В реальной базе ставлю GROUP BY - все работает, добавляю GROUP BY ROLLUP - оптимизатор умничает..... Вопрос : как заставить db2 следовать моему порядку и не пытаться вычислить SUBSTR для недопустимых значений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.07.2010, 17:53
|
|||
|---|---|---|---|
|
|||
Порядок выполнения логических операций |
|||
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=43&mobile=1&tid=1602663]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
75ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 173ms |

| 0 / 0 |
