首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DB2 ZOS字符串比较问题

DB2 ZOS字符串比较问题
EN

Stack Overflow用户
提问于 2010-05-05 22:32:35
回答 1查看 569关注 0票数 0

我正在比较sql中where子句中的一些CHAR数据,如下所示:

其中PRI_CODE < PriCode

我遇到的问题是当CHAR值具有不同的长度时。因此,如果PRI_CODE = '0800‘和PriCode = '20’,则返回true而不是false。

看起来它是这样比较的

代码语言:javascript
复制
'08' < '20' 

而不是like

代码语言:javascript
复制
'0800' < '20'

是否从左侧开始进行CHAR比较,直到一个或另一个值结束?

如果是这样,我该如何解决这个问题呢?

我的值中可以包含字母,所以不能将其转换为数字。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-05 22:39:57

它不是将'08‘与'20’进行比较,而是像你所预期的那样,将'0800‘与'20’进行比较。

然而,您似乎没有预料到的是,'0800‘(字符串)确实小于'20’(字符串)。

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

代码语言:javascript
复制
right ('0000000000'||val,10)

这将在左边给出大小为10的用零填充的val (例如,非常适合于CHAR(10) )。这将至少保证字段的大小相同,并且比较将适用于您的特定情况。但我强烈建议您重新考虑如何做事情:在性能方面,每行函数很少有很好的伸缩性。

如果您使用的是z/OS,您应该有几个DBA躺在计算机房的地板上等待工作-您可以向他们中的一个寻求更适合您的特定应用程序的建议:-)

在使用insert/update触发器和辅助列PRI_CODE_PADDED来保存完全填充的PRI_CODE列时,需要注意的一件事是(使用与上面相同的方法)。然后,在执行select ... where PR_CODE_PADDED < PriCode之前,确保您的PriCode变量的格式类似。

在插入/更新时产生的开销将在您可能执行的所有选择中分摊(因为它们不再使用每行函数,速度将快得令人眼花缭乱),从而为您提供更好的整体性能(当然,假设您的数据库不是那种写入多于读取的令人难以置信的罕见野兽)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2774127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档