oralce日期类函数,数据库编码查询,序列操作工作笔记
oralce日期类函数,数据库编码查询,序列操作工作笔记
work_mingyan 发表于4个月前
oralce日期类函数,数据库编码查询,序列操作工作笔记
  • 发表于 4个月前
  • 阅读 1
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

日期函数:  

NEXT_DAY(date,char)

说明:
date参数为日期型,
char:为1~7或Monday/Mon~Sunday/

指定时间的下一个星期几(由char指定)所在的日期,
char也可用1~7替代,1表示星期日,2代表星期一。。。
还可以是星期一、星期二。。。星期日 。

 NEXT_DAY(d,number)  
  --◎ 时间点d开始,下一个星期几的日期  
  --◎ 星期日 = 1  星期一 = 2  星期二 = 3  
  --   星期三 = 4  星期四 = 5  星期五 = 6  星期六 = 7   

工作实例:
    Select * From RECEIVE_BOX a Where trunc(RECEIVE_TIME)>=trunc(Sysdate,'d')

    AND trunc(RECEIVE_TIME)<= Next_day(trunc(sysdate,'d'),7)

其他日期函数:
    ADD_MONTHS(d,n)  
     --时间点d再加上n个月  

    LAST_DAY(d)  
      --时间点d当月份最后一天   
trunc函数:

      trunc(sysdate,'yyyy') --返回当年第一天。

  trunc(sysdate,'mm') --返回当月第一天。

  trunc(sysdate,'d') --返回当前星期的第一天。

  trunc(sysdate,'dd')--返回当前年月日


      TRUNC(89.985,2)=89.98

  TRUNC(89.985)=89

  TRUNC(89.985,-1)=80

  注意:
          第二个参数为正数,指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分。
          第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。
          与取整类似,比如参数为1即取整到十分位,如果是-1,则是取整到十位,以此类推。
加法
select sysdate,add_months(sysdate,12) from dual; --加1年
select sysdate,add_months(sysdate,1) from dual; --加1月
select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual; --加1星期
select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual; --加1天
select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --加1小时
select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1分钟
select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1秒

减法
select sysdate,add_months(sysdate,-12) from dual; --减1年
select sysdate,add_months(sysdate,-1) from dual; --减1月
select sysdate,to_char(sysdate-7,'yyyy-mm-dd HH24:MI:SS') from dual; --减1星期
select sysdate,to_char(sysdate-1,'yyyy-mm-dd HH24:MI:SS') from dual; --减1天
select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --减1小时
select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1分钟
select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1秒 

 
查询本周内(周一到周日)的数据:
SELECT count(1) AS NEW_NOTICE FROM MESSAGE_HISTORY a WHERE trunc(CREATE_TIME)>=Next_day(trunc(Sysdate,'d'),2)
AND trunc(CREATE_TIME)<= Next_day(trunc(sysdate,'d'),1)
查询七天内的数据:
select count(1) from MESSAGE_HISTORY where CREATE_TIME >= to_date(to_char(sysdate - 7,'yyyy-mm-dd HH24:MI:SS'),'yyyy-mm-dd hh24:mi:ss') 

 

查看数据库编码:

select * from V$NLS_PARAMETERS
字符串的方法:

1、length() 字符串的长度
2、charAt() 截取一个字符
3、 getChars() 截取多个字符
4、getBytes()
  替代getChars()的一种方法是将字符存储在字节数组中,该方法即getBytes()。
5、toCharArray()
6、equals()和equalsIgnoreCase() 比较两个字符串
7、regionMatches() 用于比较一个字符串中特定区域与另一特定区域,它有一个重载的形式允许在比较中忽略大小写。
8、startsWith()和endsWith()  startsWith()方法决定是否以特定字符串开始,endWith()方法决定是否以特定字符串结束
9、compareTo()和compareToIgnoreCase() 比较字符串
10、indexOf()和lastIndexOf()
  indexOf() 查找字符或者子串第一次出现的地方。
  lastIndexOf() 查找字符或者子串是后一次出现的地方。

11、substring()  它有两种形式,第一种是:String substring(int startIndex)
         第二种是:String substring(int startIndex,int endIndex)

12、concat() 连接两个字符串

13 、replace() 替换
  它有两种形式,第一种形式用一个字符在调用字符串中所有出现某个字符的地方进行替换,形式如下:
  String replace(char original,char replacement)
  例如:String s="Hello".replace('l','w');
  第二种形式是用一个字符序列替换另一个字符序列,形式如下:
  String replace(CharSequence original,CharSequence replacement)

14、trim() 去掉起始和结尾的空格

15、valueOf() 转换为字符串

16、toLowerCase() 转换为小写

17、toUpperCase() 转换为大写

18、 notify()和 notifyAll()


* oracle 查询库中所有的序列:

   select SEQUENCE_NAME from user_sequences; 
   select * from user_sequences;  

 Oracle修改序列(Sequence)起始值的方法:

    Oracle 序列(Sequence)主要用于生成流水号,在应用中经常会用到,特别是作为ID值,拿来做表主键使用较多。

    但是,有时需要修改序列初始值(START WITH)时,有同仁使用这个语句来修改:alter sequence sequencename 
    start with xxxxxxxx。但是,在Oracle DB中,修改序列没有这样的语法。下面介绍几种修改方式:

    1.先删除序列,然后重新创建。不过这不是当前要讲的重点。这个方法比较暴力,也比较方便,如果序列有在用,会影响应用的正常使用。

    2.写个循环来增加。如果需要增加500,写个循环运行500次SELECT SEQUENCE_NAME.NEXTVAL FROM DUAL;

    3.通过Increment By来实现修改初始值。

    例如:若序列名称是SEQ_TEST,初始值是13,而现在要设置初始值为1013,Increment By值为:1000(1013-13)

    1) 执行:ALTER SEQUENCE SEQ_TEST INCREMENT BY 1000;

    2) 执行:SELECT SEQ_TEST.NEXTVAL FROM DUAL;

    3) 执行:ALTER SEQUENCE SEQ_TEST INCREMENT BY 1;

删除一个序列

DROP SEQUENCE seq_newsId;


 生成序列号实例:

 -- 建一个序列SEQ_TEST
create sequence SEQ_TEST
minvalue 1        --最小值
nomaxvalue        --不设置最大值
start with 1      --从1开始计数
increment by 1    --每次加1个
nocycle           --一直累加,不循环
nocache;          --不建缓冲区

注意:

以上代码完成了一个序列(sequence)的建立过程,名称为SEQ_TEST,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!)
你只有了表和序列还不够,最好再建一个触发器来执行它!代码如下:

CREATE OR REPLACE TRIGGER tg_test 
BEFORE INSERT ON test FOR EACH ROW WHEN (new.nid is null)
begin
select seq_test.nextval into:new.nid from dual;
end;


语法解析:

① START WITH:从某一个整数开始,升序默认值是1,降序默认值是-1。

② INCREMENT BY:增长数。如果是正数则升序生成,如果是负数则降序生成。升序默认值是1,降序默认值是-1。

③ MAXVALUE:指最大值。

④ NOMAXVALUE:这是最大值的默认选项,升序的最大值是:1027,降序默认值是-1。

⑤ MINVALUE:指最小值。

⑥ NOMINVALUE:这是默认值选项,升序默认值是1,降序默认值是-1026。

⑦ CYCLE:表示如果升序达到最大值后,从最小值重新开始;如果是降序序列,达到最小值后,从最大值重新开始。

⑧ NOCYCLE:表示不重新开始,序列升序达到最大值、降序达到最小值后就报错。默认NOCYCLE。

⑨ CACHE:使用CACHE选项时,该序列会根据序列规则预生成一组序列号。保留在内存中,当使用下一个序列号时,可以更快的响应。当内存中的序列号用完时,系统再生成一组新的序列号,并保存在缓存中,这样可以提高生成序列号的效率。Oracle默认会生产20个序列号。

⑩ NOCACHE:不预先在内存中生成序列号。

案例2:创建一个从1开始,默认最大值,每次增长1的序列,要求NOCYCLE,缓存中有30个预先分配好的序列号。

 CREATE SEQUENCE MYSEQ

    MINVALUE 1
 
    START WITH 1

    NOMAXVALUE

    INCREMENT BY 1

    NOCYCLE

    CACHE 30

Sequence created

  
mysql 存储过程批量操作:

    ##如果此存储过程存在,先删除,方便以下再创建同名的存储过程
    DROP PROCEDURE IF EXISTS sp_test; 
      ##括号中是参数, INd代表是入参,int是参数的数据类型
    CREATE PROCEDURE sp_test(IN loopNumber INT,IN loopName VARCHAR(32))
    
    begin 
                ##定义一个变量,类型为int,默认值为0
                declare id int default 0;
                ##while 循环,通过传入的数值和定义的变量做判断,确定需要插入多少数据
                while id <loopNumber DO 
                        SET id=id+1;  
                        insert into student(name) values(loopName);
                 ##循环结束
                end WHILE; 

    end 

    CALL sp_test(); 

oracle:
start with conditon 给出的seed 数据的范围, connect by  后面给出了递归查询的条件,prior 关键字表示父数据,prior 条件表示子数据需要满足父数据的什么条件。

---------------------------------------------------------------------------------------------------------

该注解,是hibernate、morphia等框架的注解。
@Transient,使用hibernate时,当关联多个表进行查询,返回某一个实体类的时候,如果在此实体类中定义了不和表映射的字段属性,查询不会报错,而在此表进行新增修改数据时报错。此注解可以很好的规避这个问题。

注意:将此注解注解在字段上,而不是get set方法上。

共有 人打赏支持
粉丝 0
博文 4
码字总数 5840
×
work_mingyan
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: