Вопрос

Я сравниваю некоторые данные CHAR в предложении Where в моем SQL, как это,

где PRI_CODE <PRICODE

Проблема у меня есть, когда значения CHAR имеют разные длины. Итак, если PRI_CODE = '0800' и PRICODE = '20' возвращает true вместо false.

Похоже, это сравнивает это, как это

'08' < '20' 

вместо того, чтобы

'0800' < '20'

Начинается ли сравнение символов с левого до одного или других ценностей?

Если так, как я это исправить?

Мои значения могут иметь буквы в нем, поэтому преобразование в числовой не является опцией.

Это было полезно?

Решение

Это не сравнивает «08» с «20», то, как вы ожидаете, сравнивая «0800» с «20».

Однако вы, кажется, не ожидаете, что «0800 '(строка) конечно меньше, чем 20 '(строка).

Если преобразование его к численности для числового сравнения выходит из вопроса, вы можете использовать следующую функцию DB2:

right ('0000000000'||val,10)

что даст вам val навесной слева с нулями до размера 10 (идеально подходит для CHAR(10), Например). Это, по крайней мере, гарантирует, что поля одинаковы размер, и сравнение будет работать для вашего конкретного случая. Но я призываю вас переосмыслить, как вы делаете все: зарядные функции редко масштабируются, производительность - мудрый.

Если вы используете Z / OS, у вас должен быть несколько DBA, просто лежа на пол комната, ожидая работы - вы, вероятно, можете задать один из них для совета более адаптирован к вашему конкретному приложению :-)

Одна вещь, которая приходит на ум при использовании триггера вставки / обновления и вторичной колонне PRI_CODE_PADDED держать PRI_CODE Столбец полностью прокладывается (используя тот же метод, что и выше). Тогда убедитесь, что ваш PriCode переменная аналогично отформатирована перед выполнением select ... where PR_CODE_PADDED < PriCode.

Независимо от того, что затраты при вставке / времени обновления будут амортизировать его на всех выборах, которые вы, вероятно, сделаете (которые, поскольку они больше не используют функции заряд, будут ослепненно быстрыми), предоставляя вам лучшую общую производительность База данных не является одним из тех невероятно редких зверей, которые, конечно, написаны более чем прочитанные).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top