ORACLE中关于使用between取不同的区间值和取反

最近在项目中使用between取不同的区间值问题,由于区间跨度大,而且区间多,又是前端传过来的参数,所以使用in和exists比较麻烦。然后就考虑使用between。现将使用方法记录一下。

假如表有个字段param_key,参数区间值为:100-300、1000-1999、3050-5000。

首先是between的用法是:param_key between value1 and value2。如果是有多个between则是:param_key between 100 and 300 and param_key between 1000 and 1999 and param_key between 3050 and 5000。

这杨很容易理解,也能很容易知道怎么写SQL,比较麻烦的就是我们使用的是Mybatis,所以拼接动态SQL和参数的传递方式很重要。

首先我们会想到使用mybatis的foreach去遍历。但是参数是param_key,所以就会想到把区间值给拆分成两部分来传递。具体作法如下:

1.首先创建一个类,用来封装区间值:

public class ParamKey{
    private String startKey;
    private String endKey;

    //getter,setter
}

2.创建请求类:

public class ParamRequest{
    private List<ParamKey>  key;//不同区间值的集合

    //getter,setter
}

3.业务处理:

public class ServiceImpl{

    public void queryData( ParamRequest request){
    //业务处理,调用dao层方法
    }
}

4.Mybatis中SQL:

原文地址:https://www.cnblogs.com/whx20100101/p/10337859.html

时间: 01-30

ORACLE中关于使用between取不同的区间值和取反的相关文章

转,Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数

关于处理小数点位数的几个oracle函数() 1. 取四舍五入的几位小数 select round(1.2345, 3) from dual; 结果:1.235 2. 保留两位小数,只舍 select trunc(1.2345, 2) from dual; 结果:1.23 select trunc(1.2399, 2) from dual; 结果:1.23 3.取整数 返回大于或等于x的最大整数: SQL> select ceil(23.33) from dual; 结果: 24 返回等于或小于

oracle 中的round()函数、null值,rownum

round()函数:四舍五入函数 传回一个数值,该数值按照指定精度进行四舍五入运算的结果. 语法:round(number[,decimals]) Number:待处理的函数 Decimals:精度,默认为0: Select round(123.456,0) as a,round(123.456,1) as b,round(123.456,-1) as c from dual; null值: NULL值就是没有值或者缺值.允许NULL值的列也允许在插入行时不给出该列的值.不允许NULL值的列不接

C#以及Oracle中的上取整、下取整方法

1.C#中: 上取整——Math.Ceiling(Double),即返回大于或等于指定双精度浮点数的最大整数(也可称为取天板值): eg:  Math.Ceiling(1.01)=2;      Math.Ceiling(1.37)=2; 下取整——Math.Floor(Double),即返回小于或等于指定双精度浮点数的最大整数(也可称为取地板值): eg:  Math.Floor(1.99) =1;       Math.Floor(1.87) =1; 2.Oracle中: 上取整——ceil

Oracle 中 decode 函数用法

Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ......ELSIF 条件=值n THEN RETURN(翻译值n)ELSE RETURN(缺省值)END IFdecode(字段或字段的运算,值1,值2,值3) 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值

转:Oracle中的rownum不能使用大于&gt;的问题

一.对rownum的说明 关于Oracle 的 rownum 问题,很多资料都说不支持SQL语句中的“>.>=.=.between...and”运算符,只能用如下运算符号“<.<=.!=”, 并非说用“>.>=.=.between..and”时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来. 其实,只要理解好了这个 rownum 伪列的意义就不应该感到惊奇. rowid 与 rownum 虽都被称为伪列,但它们的存在方式是不一样的: r

oracle中的job

oracle知识点-job oracle中的job类似于Linux中的crontab的作用,用于定时执行某些操作 相关视图:dba_jobs,user_jobs,all_jobs,dba_jobs_running 相关参数:job_queue_processes 相关包:dbms_job 有关dba_jobs.dba_jobs_running 字段的解释: dba_jobs 描述数据库中所有的job desc dba_jobs 有关interval参数的值 dba_jobs_running  列

oracle中110个常用函数介绍

1. ASCII 返回与指定的字符对应的十进制数; SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dual; A A ZERO SPACE --------- --------- --------- --------- 65 97 48 32 2. CHR 给出整数,返回对应的字符; SQL> select chr(54740) zhao,chr(65) chr65 from dual; ZH C --

关于oracle中数据类型的选择

由于是初学,犯了如下错误: 生成表的主键id时,用当前时间的毫秒值.而在oracle中定义主键id时,用的数据类型是char(32).在mybatis中通过id取数据怎么也取不出来.想了好几天,本来以为是浏览器中取id是带有空值,于是乎就用trim()函数去除空值,但还是没有查出数据,最后才发现是数据库中的数据类型定义成固定长度了,当前时间的毫秒值只有16位,而char(32)就是固定长度的32位,意思也就是说有16位是空格了,所有没法取出数据.动手将char(32)改成varchar2(32)

如何用Excel直接查询Oracle中的数据(转)

将Oracle中查询的数据保存为Excel文件,通常使用的是PL/SQL Developer. 其实,Excel可直接写SQL语句查询Oracle中数据,在这里,用到ODBC驱动.详细步骤如下: 一.配置ODBC数据源 开始->控制面板->系统和安全->管理工具->ODBC数据源(可根据自己的情况选择32位还是64位). 因本机安装的是Oracle 11.2.0.4 64位,故选择ODBC数据源(64位),显示如下: 点击“添加”,选择“Oracle in OraDb11g_hom

oracle中数据类型对应java类型

地址: http://otndnld.Oracle.co.jp/document/products/oracle10g/102/doc_cd/Java.102/B19275-03/datacc.htm#BHCJBJCC SQL数据类型 JDBC类型代码 标准的Java类型 Oracle扩展的Java类型   1.0标准的JDBC类型:     CHAR java.sql.Types.CHAR java.lang.String oracle.sql.CHAR VARCHAR2 java.sql.T