如果不使用判斷操作保證任意一個數如果大於30則為30,否則為原值(SQL中排序時對欄位值進行最大限制),30則sql

來源:互聯網
上載者:User

如果不使用判斷操作保證任意一個數如果大於30則為30,否則為原值(SQL中排序時對欄位值進行最大限制),30則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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.