Это не сравнение «08» с «20», это, как вы ожидаете, сравнение «0800» с «20».
Однако вы не ожидаете, что это «0800 '(строка) - это , действительно меньше, чем' 20 '(строка).
Если преобразование в числовое значение для числового сравнения исключено, вы можете использовать следующееФункция DB2:
right ('0000000000'||val,10)
, которая даст вам val
с дополнением слева нулями до размера 10 (например, идеально для CHAR(10)
).Это по крайней мере гарантирует, что поля имеют одинаковый размер, и сравнение будет работать для вашего конкретного случая.Но я призываю вас переосмыслить, как вы делаете вещи: функции для отдельных строк редко масштабируются с точки зрения производительности.
Если вы используете z / OS, у вас должно быть несколько администраторов баз данных, просто лежащих наэтаж компьютерного зала в ожидании работы - вы, вероятно, можете обратиться к одному из них за советом, более приспособленным для вашего конкретного приложения: -)
Одна вещь, которая приходит на ум при использовании триггера вставки / обновления и вторичного столбцаPRI_CODE_PADDED
для полного заполнения столбца PRI_CODE
(используя тот же метод, что и выше).Затем убедитесь, что ваша переменная PriCode
отформатирована аналогичным образом перед выполнением select ... where PR_CODE_PADDED < PriCode
.
. Принимая во внимание, что стоимость во время вставки / обновления будет амортизировать ее по всем вариантам выбора, которые вы, вероятно, сделаете (что, потому что ониВы больше не будете использовать функции для каждой строки, это будет невероятно быстро), что даст вам лучшую общую производительность (при условии, что ваша база данных не является одним из тех невероятно редких зверей, которые пишутся больше, чем читаются, конечно).