greatest/least vs. max/min内建oracle函数

使用Oracle9i数据库已经快2年了, sql语句编写及查询优化均有所涉及。对于oracle的内建函数也基本都用过。比如针对字符型、数值型、日期型的单行处理函数(substr / length / instr..., sin / cos /..., to_date / to_char / month_between / ...) ;聚合运算(max / min / avg / sum / ...);分析函数(last / ...)。曾经也到网上下了oracle的函数大全,看过几遍。但还是存在了知识的盲点,让人惭愧。这里要说到的是greatest / least两个函数。原来一直没找到oracle里求最大最小值的单行函数,所以用了替代方案。

比如算a和b的最大值,写成decode(sign(a-b), 1, a, b)算最大值。当然这个也能满足我们的要求,唯一的缺陷是可读性比较差。今天早上看到同事写的pl/sql代码中用到了greatest函数,恍然大悟,惭愧的不行了。

greatest和least函数输入参数为表达式列表,即greatest(expr_list)。表达式的形式可以多样化,支持大多数的数据类型(只要该类型数据能相互比较)。比如
greatest(1, 2, 3, 4)
greatest(to_date('20070101', 'yyyymmdd'), sysdate)
greatest('abc', 'abc1')

到oracle函数大全中,寻找了一下,发现该函数赫然在列,使用方法写的清清楚楚。以前一直没用过,所以以为不存在这样的函数。改写了原来的代码,可读性好多了。写到sql语句中的话,如果循环次数很大,超过100万以上,估计性能也比用decode方式的好。总之,惭愧一个,同时感觉到学海无涯。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值