码迷,mamicode.com
首页 > 数据库 > 详细

如果不使用判断操作保证任意一个数如果大于30则为30,否则为原值(SQL中排序时对字段值进行最大限制)

时间:2015-03-19 11:34:04      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:sql

    场景:在数据库中,需要对某一结果进行排序,排序时按某几个字段按不同的权重排序,但其中一个字段的最大权重限制到30.

    分析:在SQL中是没有a>30?30:a 这样的操作的,只有基本运算(+-*/),逻辑运算(&&   ||   xor )等。

    答案:

            ((a-a%30)&&1)*30  : a小于30时,a-a%30为0,(0&&1)*30的结果为0,a大于等于30时,最终结果为30

           (a-a%30) xor 1 :当a大于等于30时,值为0,小于30时,结果为1

           ((a-a%30) xor 1)*(a%30)  : 当a大于等于30时,值为0,小于30时,结果为a

           最终:((a-a%30)&&1)*30+((a-a%30) xor 1)*(a%30)    

                        当a小于30时,+号之前的部分运算得到0,之后的运算得到a,相加为a

                        当a大于等于30时,+号之前的部分运算得到30,之后的运算得到0,相加为30

如果不使用判断操作保证任意一个数如果大于30则为30,否则为原值(SQL中排序时对字段值进行最大限制)

标签:sql

原文地址:http://blog.csdn.net/flyxxxxx/article/details/44454093

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!