Home  >  Article  >  Database  >  Orcale and 逻辑运算符的特殊情况

Orcale and 逻辑运算符的特殊情况

WBOY
WBOYOriginal
2016-06-07 17:11:55903browse

Orcale and 逻辑运算符的特殊情况,我们平常在写Oracle 语句的时候,可能会在 where 语句后面 加上 and逻辑运算符,但是这样存在

前些日子在做项目的时候遇到一个很诡异的情况,今天打算写下来供朋友们分享。

我们平常在写Oracle 语句的时候,可能会在 where 语句后面 加上 and逻辑运算符,但是这样存在一个问题。列下

select (t1.SaleCount/t1.PurductCount) as s from table1 t1

where

t1.PurductCount>0

从上面这段SQL语句来看是没有任何问题的,我其实就是将商品的销量来除以商品的总量来得到上面的销售率。

在PurductCount字段不为0的时候查询是不会出任何问题的,,但是假如PurductCount有0的情况。当然就会出问题了,分母是不能为0的。

可能有朋友就会说了你个SB,你这里不是用where语句过滤掉了吗?

是的这里就是特殊情况了,先来说说这个and逻辑运算符在orcale里面的情况(MSSQL不清楚)如果有and的 SQL语句,那么orcale执行的情况是,

先把结果集找出来然后再直接 and逻辑运算,说白了and这个运算是在查询后来执行的。这样会出现什么情况。

肯定程序就会报分母不能为0的错误了。因为and没有运算前,我们的数据库里面的数据可能是有0存在的但我们查询结果的时候又在做除法运算。

怎么解决呢?方法很多哈,

最简单的一种就是 在查询的时候用decode函数  过滤如果分母为0那么就将查询出来的字段值替换成0或者特殊字符,

然后最后加上过滤这个特殊字符的 where条件即可。

第一次写,反正是给自己留着用的。

至于你们看不看的懂我就没办法了。

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn