Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Порядок выполнения логических операций
|
|||
|---|---|---|---|
|
#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, 12:05 |
|
||
|
Порядок выполнения логических операций
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2010, 17:53 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=36745749&tid=1602663]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
73ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 161ms |

| 0 / 0 |
