oracle数据库知识点

oracle一个字段相同,另一个字段不同,然后让这个相同的字段显示成一行数据

例如:
字段1   字段2
A        1
A        12
B        2
B        23
C        3
C        334
C        355

显示成
字段1  字段2  字段3  字段4
A          1       12
B          2       23
C          3       334      355

方法一、

select col1,max(decode(colnum,1,col2,null))colA,max(decode(colnum,2,col2,null))colB,max(decode(colnum,3,col2,null))colC from (

select col1,col2,row_number()over(partition by col1 order by col2)colnum from COL_TO_ROW 

)group by col1

方法二、

select a,b,c,wm_concat(d) d,wm_concat(e) e from 表名 group by a,b,c

oracle数据库通过空格截取字符串

语句:SELECT  SUBSTR('AHS1234  3232',0,INSTR('AHS1234  3232',' ')-1) str FROM dual; 结果是:AHS1234。

其中instr函数是查找空格在字符串中的位置,而SUBSTR函数是用来截取字符串的。

截取的区域是从字符串开始截取到空格的位置的前一位,比如空格的位置是6,我们就截取5位。

一般来说截取方式就是上面所示了,如果你的空格不固定的话,你需要定义一个字符串才可以进行截取。

以上就是select截取空格前字符的方法,希望可以帮到大家。

 

oracle数据库通过空格截取字符串

select listagg(jbmc,',') within group(order by brxh)  from bl_bingrenzdqk where brxh ='218004'  
这是最基础的用法:LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX)
用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来。

可以考虑使用wmsys.wm_concat方法,该方法是将记录的值使用逗号间隔拼接,使用方法如下:

 select t.rank, WMSYS.WM_CONCAT(t.Name) TIME From t_menu_item t GROUP BY t.rank;

 

oracle数据库已Date类型保存日期

1. 使用JDBC操作Oracle数据库时,使用java.sql.Date类型对应数据库的date类型,此时只能保存和读取日期部分,

  时间(时分秒)部分不能读取和保存;

  查询结果集可以直接获取Date类型的数据:java.sql.Date date=resultSet.getDate("dateTime");

  java.sql.Date类型的数据也可以直接保存到数据库或者与数据库中date类型的数据直接比较大小;

  字符串的日期,则用SQL语句的转换函数 to_date('2017-4-8','yyyy-mm-dd') 转换为date类型插入到数据库。

 

2. 使用Hibernate操作Oracle数据库时,使用java.util.Date类型对应数据库的date类型,此时数据库可以保存和读取到时分秒;

  java.sql.Date 和java.util.Date 类型的数据都可以直接保存到数据库或者与数据库中date类型的数据直接比较大小,但从数

  据库读取的日期数据要用java.util.Date 进行保存,因为java.sql.Date 是java.util.Date 的子类。

 

3.方法:setDate(1, new Date()); 或者 setTimestamp(1, new Timestamp(new Date().getTime()));都是可以的.

 

oracle数据库中number类型在hibernate的引用

1)如果不指定number的长度,或指定长度n>18

id number not null,转换为pojo类时,为Java.math.BigDecimal类型

2)如果number的长度在10 <= n <= 18

id number(n) not null,转换为pojo类时,为java.lang.Long类型

3)如果number的长度在1 <= n <= 9

id number(n) not null,转换为pojo类时,为java.lang.Integer类型

oracle本地数据库连接到服务器的数据库设置方法

http://www.2cto.com/database/201207/141120.html

Oracle SQL 分页查询

http://blog.csdn.net/u011532367/article/details/50161397

1、表结构

SQL> desc test; 
 名称                  是否为空? 类型
 --------------------- -------- ---------------
 ID                    NOT NULL NUMBER(8)
 USERNAME                       VARCHAR2(32)
 PASSWORD                       VARCHAR2(32)
 AGE                            NUMBER(3)
 BIRTHDAY                       DATE
 ADDRESS                        VARCHAR2(40)

select * 2 from (select test.*, rownum rownum_ from test where rownum <= 5000000 order by id asc) 3 where rownum_ >= 4999990;


对于Oracle的分页操作我还是倾向于使用如下的rownum的方式来完成,通常的写法如下:
http://www.jb51.net/article/52272.htm

-- 返回第20页数据,每页10行SQL> define pagenum=20SQL> define pagerecord=10SQL> select t.* from (select d.*,rownum num from my_objects d2 where rownum<=&pagerecord*&pagenum) t3 where t.num>=(&pagenum-1)*&pagerecord +1;

old 2: where rownum<=&pagerecord*&pagenum) t
new 2: where rownum<=10*20) t
old 3: where t.num>=(&pagenum-1)*&pagerecord +1
new 3: where t.num>=(20-1)*10 +1

OBJECT_ID OBJECT_NAME OBJECT_TYPE NUM
---------- ------------------------------ ------------------- ----------
191 SQLOBJ$DATA_PKEY INDEX 191
192 SQLOBJ$AUXDATA TABLE 192
193 I_SQLOBJ$AUXDATA_PKEY INDEX 193
194 I_SQLOBJ$AUXDATA_TASK INDEX 194
195 OBJECT_USAGE TABLE 195
196 I_STATS_OBJ# INDEX 196
197 PROCEDURE$ TABLE 197
198 PROCEDUREINFO$ TABLE 198
199 ARGUMENT$ TABLE 199
200 SOURCE$ TABLE 200

10 rows selected.

 

Oracle_查询当天记录 三种方法效率比较

 

方法一:用to_char()函数

   select count(*) from mobilefrends where to_char(cdate,'yyyy-mm-dd')=to_char(sysdate,'yyyy-mm-dd');

 COUNT(*)

----------

     82119 

已用时间:  00: 00: 17.18

 

方法二:用trunc()函数

select count(*) from mobilefrends where trunc(cdate)=trunc(sysdate);

  COUNT(*)

----------

     82119

已用时间:  00: 00: 16.32

 

方法三:不用函数

 select count(*) from mobilefrends where cdate>=trunc(sysdate) and cdate<trunc(sysdate)+1;

  COUNT(*)

----------

     82119

已用时间:  00: 00: 00.43

-- 由上三种方法可见:

-- 方法一:用to_char()函数,耗时17.18秒,逻辑读为36896次,执行的是全索引扫描;

-- 方法二:用trunc()函数,耗时16.32秒,逻辑读也是36896次,执行的也是全索引扫描;

-- 方法三:不用函数,耗时0.43秒,逻辑读为221次,执行的是索引范围扫描;

 

 oracle 查询所有数据中最近的一条数据

select jzkh,xm,xb,sfzh,khlx,ybkh,lxdh,jtzz from gy_brjbxxk where ldrq in
<trim prefix="(" suffix=")" >
select max(ldrq) from gy_brjbxxk where sfzh=#{idcard}
<if test="medcardno != null">
and jzkh=#{medcardno}
</if>
</trim>

Oracle_字符串自动+1

update mz_pjgl set dqhm= lpad(dqhm+1,10,'0') where skgh='AUTO8'

 

 

oracle group by 字段合并

中国 台北 
中国 香港 
中国 上海 
日本 东京 
日本 大阪 
要求得到如下结果集: 
------- -------------------- 
中国 台北,香港,上海 

日本 东京,大阪 

COUNTRY VARCHAR2(20) Y 
CITY VARCHAR2(20) Y 

使用wm_concat函数,会将字段合并 并用逗号分隔

select COUNTRY,wm_concat(CITY) from table group by city

 

oracle 查询所有字段,某字段重复只显示一条

那就用distinct函数,只取出重复的唯一记录就可以了。
sql:select distinct(* ) from tablename ;

备注:通常没有这么用的,因为一般表都有主键,或者时间字段,不会出现重复,所以一般针对某个特定字段distinct意义更大些。
sql:select distinct(a ) from tablename ;
 

SQL语法——left join on 多条件

left join on +多条件与where区别

https://blog.csdn.net/minixuezhen/article/details/79763263

posted @ 2017-06-25 10:57  火线速递  阅读(416)  评论(0编辑  收藏  举报