条件判断
<select id="xx" parameterType="Map" resultType="Map"> select * from ( select rownum rn, person.client_id as id, person.client_id, person.name, person.cert_type, person.cert_no, person.birthday, person.sex, case photo.photo_state when '0' then '正常' when '1' then '注销' else '无' end as photo_state from xx left join xo on id = t_id where te = '0' <!-- 判断是否有查询内容-start --> <if test="search.certType != null and search.certType != ''"> AND person.cert_Type=#{search.certType} </if> <if test="search.certNo != null and search.certNo != ''"> AND person.cert_no=upper(#{search.certNo}) </if> <if test="search.name != null and search.name != ''"> AND person.name LIKE concat(concat('%', #{search.name}), '%') </if> <!-- 判断是否有查询内容-end --> <!-- 没有排序条件,自定义默认排序字段 --> <choose> <when test="order != null and order != ''"> ORDER BY ${order} </when> <!-- 默认按照用户创建时间倒序 --> <otherwise>ORDER BY person.open_date desc</otherwise> </choose> ) <!-- 分页条件 --> where rn <= (#{start} + #{length}) and rn > #{start} </select>
时间比较:
SELECT REGION_NO,COUNT(*) total FROM xx WHERE 1=1 <if test="search.beginDate != null and search.beginDate != ''"> <![CDATA[ and SIGN_TIME>to_date(#{search.beginDate},'yyyy-mm-dd hh24:mi:ss') ]]> </if> <if test="search.endDate != null and search.endDate != ''"> <![CDATA[ and SIGN_TIME<to_date(#{search.endDate},'yyyy-mm-dd hh24:mi:ss') ]]> </if> group by REGION_NO ) z WHERE z.REGION_NO=d.REGION_NO -- ============================================================================== where r.client_id = b.client_id and r.data_complete = '0' and r.apply_time >=to_date(#{search.beginDate},'yyyy-MM-dd') and r.apply_time<![CDATA[ <= ]]>to_date(concat(#{search.endDate},' 23:59:59'),'yyyy-MM-dd HH24:mi:ss')
select * from(
select rownum as rn,e.* from(
select *,to_char(t.order_time, 'yyyy-mm-dd hh24:mi:ss') order_time,t.biz_id,b.biz_name,bt.trade_name,t.CERT_NO
from xxt
WHERE b.zD=t.zx
--and order_time>to_date('2020-08-30 22:00:00','yyyy-mm-dd hh24:mi:ss')and order_time<to_date('2021-06-10 22:00:00','yyyy-mm-dd hh24:mi:ss')
)e)
-- order_time>str_to_date('2019-11-30 22:00:00','yyyy-mm-dd hh24:mi:ss')and order_time<str_to_date(ch, fmt)('2021-06-10 22:00:00','yyyy-mm-dd hh24:mi:ss')
-- and order_time>to_date('2020-08-30 22:00:00','yyyy-mm-dd hh24:mi:ss')and order_time<to_date('2021-06-10 22:00:00','yyyy-mm-dd hh24:mi:ss')
分页查询
<select id="xx" parameterType="Map" resultType="java.util.Map"> select * from( select rownum as rn,e.* from( select t.x,t.x,s.xAS x,t.x,t.x, s1.xAS x,to_char(t.order_time, 'yyyy-mm-dd hh24:mi:ss') order_time, t.biz_id,b.biz_name,bt.trade_name,t.x from xtWHERE b.x=t.xand t.x=#{cert_no} <![CDATA[ and order_time>to_date(#{begin_date},'yyyy-mm-dd hh24:mi:ss') ]]> <![CDATA[ and order_time<to_date(#{end_date},'yyyy-mm-dd hh24:mi:ss') ]]> )e) <!-- 分页条件 --> where rn <= (#{start} + #{length}) and rn > #{start} </select>
========================================================================================
使用:
--rownum关键字:oracle对外提供的自动给查询结果编号的关键字,与每行的数据没有关系。
--注意:rownum关键字只能做< <=的判断,不能进行> >=的判断
select rownum ,e.* from emp e;
--查询员工信息的前5条数据 第一页数据
select rownum r,e.* from emp e where rownum <=5; select * from (select rownum r,e.* from emp e where rownum <=5) t where r>0;
--查询员工信息的6-10条数据 第二页数据
select rownum r,e.* from emp e where rownum <=10; select rownum,t.* from (select rownum r,e.* from emp e where rownum <=10) t where r>5;
--查询员工信息的11-15条数据 第三页数据
select rownum r,e. * from emp e where rownum<=15; select * from (select rownum r,e. * from emp e where rownum<=15) t where r>10;
--分页规律总结:每页显示m条数据,查询第n页数据
select * from (select rownum r,e. * from 要分页的表 e where rownum<=m*n) t where r>m*n-m ;
--要分页的表既可以是真实的表,也可以是一个查询语句
--分页查询员工信息按照工资排序
select * from (select rownum r,t.* from (select * from emp order by sal) t where rownum<=10 ) where r>5
注:sql代码不完整