我在帮助同事调试返回奇怪结果的查询。我们把范围缩小到一条线,是这样的:了解ORACLE'S BETWEEN关键字
WHERE COL BETWEEN“11201”和“111226”
在COL的价值来自于子打电话,所以这是一个字符串类型的值。这不会返回结果。天真地,我一直认为BETWEEN代表> =和< =,如果你用字符串调用它,它会把所有东西都转换成数值类型值。这工作得很好,如果你有这样的:
WHERE COL BETWEEN“11201”和“11226”
在哪,我们都在使用它的情况下返回结果。
显然,由于第二段代码返回了结果,但第一段代码没有,我的理解是错误的。
我把所有东西都转换成了数字,然后再次尝试,并得到了预期的行为。由此看来,我可以得出结论,当它进行字符串比较时,实际上不会转换值 - 相反,它逐个字符地转换。当它到达第三个字符并且在下限参数中看到2> 1时,它将基于以下行为从Oracle documents退出:
如果expr3 < expr2,则间隔为空。
任何人都可以权衡如果这是真正发生在引擎盖下的事情吗?
谢谢!
'col'是一个字符串,你传递两个字符串成' between'。我不知道你为什么会期望这样做,但是,正如你注意到的那样,它不会。 – Donnie
@Donnie是的,我真的不知道为什么我会认为它会施展 - 回想起来似乎很愚蠢。 – Joe