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