Oracle CASE函数用法

576 阅读1分钟

一、基本语法

CASE [COLUMN_NAME]   
--        WHEN ['条件参数'] THEN ['COLUMN_NAME/显示内容']  
--        WHEN ['条件参数'] THEN ['COLUMN_NAME/显示内容']  
--        ......  
--        ELSE ['COLUMN_NAME/显示内容']  
--        END

二、使用场景

1、查询结果中,在select之后,from之前;
2、查询条件中,在where之后。

三、示例

<!-- 查询字段 -->
<sql id="columns">
    P.PAPER_BOOK_ID, P.PAPER_BOOK_NAME, P.PRICE AS PRICE,
    <!-- select之后,from之前-->
    (case when E.CARD_QUANTITY is not null then E.CARD_QUANTITY else 1 end) 
    AS CARD_COUNT, S.STOCK_NUM AS STOCK, (case when P.CATEGORY_NAME = '预售' then 2 else 1 end) 
    AS BOOK_TYPE, D.USE_FILTER, D.OPT_TIME
</sql>

<!-- 动态查询 -->
<sql id="select">
    <where>
        P.CP_ID <![CDATA[ <> ]]> 29
        <if test="paperBookName != null and paperBookName !='' ">
            and P.PAPER_BOOK_NAME like '%' || #{paperBookName,jdbcType=VARCHAR} ||'%'
        </if>
        <if test="paperBookId != null and paperBookId !=''">
            and P.PAPER_BOOK_ID = #{paperBookId}
        </if>
        <if test="cardBegin != null">
            <!--where之后-->
            and (case when E.CARD_QUANTITY is not null then E.CARD_QUANTITY 
            else 1 end) <![CDATA[ >= ]]> #{cardBegin}
        </if>
        <if test="cardEnd != null">
            and (case when E.CARD_QUANTITY is not null then E.CARD_QUANTITY 
            else 1 end) <![CDATA[ <= ]]> #{cardEnd}
        </if>
        <if test="useFilter != null">
            and D.USE_FILTER = #{useFilter}
        </if>
	</where>
</sql>
	

<!-- 分页组件拼装  -->
<sql id="pagesModuleLeft">
    SELECT * FROM  
        (  
	    SELECT A.*, ROWNUM RN from (
</sql>

<!-- 分页组件拼装 -->
<sql id="pagesModuleRight">
	 ) A
   		)
    WHERE RN &gt;= ((${pageIndex}-1) * ${pageSize}) + 1 and RN &lt;= ${pageIndex} * ${pageSize}
</sql>

<!---动态查询-->
<select id="queryDBookByCondition" resultMap="BaseResultMap"
parameterType="com.xx.xx.book.dto.Dto">
    <if test="pageIndex != null "><include refid="pagesModuleLeft"/></if>
    select rownum rowseq, <include refid="columns"/>  from
    PAPERBOOK_STOCK S
    left join PAPERBOOK P on S.PAPER_BOOK_ID = P.PAPER_BOOK_ID
    left join PAPERBOOK_EXCHANGE_CARD E on P.PAPER_BOOK_ID = E.PAPER_BOOK_ID
    left join D_BOOK D on P.PAPER_BOOK_ID = D.PAPER_BOOK_ID <include refid="select"/>
    order by P.CREATE_TIME desc
    <if test="pageIndex != null "><include refid="pagesModuleRight"/></if>
</select>  
    

四、个人电商中台开源项目

   square-pavilion(四方阁)

 链接:github.com/ChenJinchen…

  Square pavilion is a cube project for e-commerce.(四方阁是一个为电商而生的中台项目)。 在玄幻小说中,总有一些比较牛逼且左右逢源于各个势力之间的中立组织,这些组织通常带有“阁”字。因此本项目取名“四方阁”,取包容并蓄,吸取百家之长之意。欢迎有兴趣的小伙伴们一起努力,把这个项目完善、推广。 Github square-pavilion