它不是将“08”与“20”进行比较,而是如您所料,将“0800”与“20”进行比较。
但是,您似乎没有想到的是,'0800'(字符串)确实小于 '20'(字符串)。
如果将其转换为数字以进行数字比较是不可能的,那么您可以使用以下 DB2 函数:
right ('0000000000'||val,10)
这将使您val
在左侧用零填充到 10 的大小(例如,非常适合 a CHAR(10)
)。这至少可以保证字段大小相同,并且比较适用于您的特定情况。但我敦促你重新考虑你是如何做事的:每行函数很少能很好地扩展,性能方面。
如果您使用的是 z/OS,那么您应该有几个 DBA 正躺在机房地板上等待工作 - 您可能可以向其中一位 DBA 寻求更适合您的特定应用程序的建议 :-)
PRI_CODE_PADDED
在使用插入/更新触发器和辅助列来保持列完全填充时想到的一件事PRI_CODE
(使用与上述相同的方法)。然后PriCode
在执行select ... where PR_CODE_PADDED < PriCode
.
在插入/更新时产生的成本将在您可能执行的所有选择中摊销(因为它们不再使用每行函数,所以速度会非常快),从而为您提供更好的整体性能(假设您的当然,数据库并不是那些写多于读的极其罕见的野兽之一)。