我正在比较我的SQL中的某个子句中的一些char数据,

pri_code <pricode

我面临的问题是炭值的长度不同。因此,如果pri_code ='0800'和pricode ='20'它返回true而不是false。

看起来像是这样比较

'08' < '20' 

而不是喜欢

'0800' < '20'

char比较是否从左开始到一个或另一个值结束?

如果是这样,我该如何解决?

我的值可以包含字母,因此转换为数字不是一个选择。

有帮助吗?

解决方案

它不是将“ 08”与“ 20”进行比较,正如您所期望的那样,将“ 0800”与“ 20”进行比较。

但是,您似乎没有期望的是“ 0800”(字符串)是 确实 小于“ 20”(字符串)。

如果将其转换为数字以进行数字比较不可能,则可以使用以下DB2函数:

right ('0000000000'||val,10)

这会给你 val 在左侧填充零,大小为10(理想 CHAR(10), , 例如)。这至少可以保证字段的大小相同,并且比较将适用于您的特定情况。但是,我敦促您重新考虑自己的工作方式:每行功能很少在性能方面很好地扩展。

如果您使用的是Z/OS,则应该有几个DBA在计算机室的地板上等待工作 - 您可能可以向其中一个DBA询问其中的建议,以便为您的特定应用程序量身定制更多的建议:-)

使用插入/更新触发器和辅助列时想到的一件事 PRI_CODE_PADDED 持有 PRI_CODE 列完全填充(使用与上述相同的方法)。然后确保您的 PriCode 在执行之前,变量类似地格式化 select ... where PR_CODE_PADDED < PriCode.

在插入/更新时间发生的成本会在您可能要做的所有选择中摊销它(因为他们不再使用每行功能,将持久快速),从而为您提供更好的整体性能(假设您的当然,数据库并不是那些非常罕见的野兽之一,当然,数据库是更多的野兽。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top