zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    codeforces 1096 题解
    pkuwc 前的任务计划
    codeforces 1093 题解
    luoguP5068 [Ynoi2015]我回来了
    luoguP5074 Eat the Trees
    二分
    保护
    数数字
    旅行
    すすめ!
  • 原文地址:https://www.cnblogs.com/huoxiansudi/p/7076314.html
Copyright © 2011-2022 走看看