首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要显式地修剪一个字符列吗?

我需要显式地修剪一个字符列吗?
EN

Stack Overflow用户
提问于 2020-05-19 18:47:05
回答 1查看 85关注 0票数 1

我的查询检查表中是否有列出的任何值:

代码语言:javascript
复制
SELECT c FROM t WHERE RTRIM(c) IN ('string1', 'string2', ... 'stringN')

c的类型是CHAR,在将值与枚举值进行比较时,似乎需要使用RTRIM()来消除填充。

但是,我尝试在没有RTRIM()的情况下运行查询,它返回了完全相同的结果--尽管c中的所有值都小于最大宽度。

此外,如果我用右边空格填充枚举字符串,结果仍然是一样的。也就是说,'MEOW '是在('MEOW')中,也在('MEOW ')中。

这似乎很奇怪--是这样的事情应该如何运作,还是我们不应该依赖它?我们现在还在使用Oracle-11,这是标准的行为,还是将来会改变呢?

对我们来说,重要的不仅仅是因为stethics,还因为我们想在列上添加一个索引--并且避免使用"functional“(函数是RTRIM())。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-19 18:48:58

比较char()列的规则通常指定将值填充到较长的列的长度中。

因此,比较字符串末尾的空格是可选的。

我是记录在案

对于空白填充语义,如果这两个值有不同的长度,那么Oracle首先将空白添加到较短的值的末尾,这样它们的长度是相等的。。。。如果两个值没有不同的字符,那么它们被认为是相等的。此规则意味着,如果两个值仅在尾随空格数上不同,则它们是相等的。Oracle只在比较中的两个值都是CHAR、NCHAR、数据类型的表达式时才使用空白填充比较语义。。。

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

https://stackoverflow.com/questions/61898488

复制
相关文章

相似问题

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