时间to_date,层级查询 --工作备忘2016/1/8

来源:互联网 发布:刘双军网络二胡教学15 编辑:程序博客网 时间:2024/05/01 09:56


工作备忘2016/1/8


1、 to_date() 使用方法

一、在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会直接的采用"yyyy-MM-dd HH:mm:ss"的格式作为格式进行转换,但是在Oracle中会引起错误:"ORA 01810 格式代码出现两次"。

select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;

如:
原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。

select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;

二、另要以24小时的形式显示出来要用HH24

select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分钟
select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm会显示月份 

oracle中的to_date参数含义

1.日期格式参数 含义说明 

D 一周中的星期几  
DAY 天的名字,使用空格填充到9个字符  
DD 月中的第几天  
DDD 年中的第几天  
DY 天的简写名  
IW ISO标准的年中的第几周  
IYYY ISO标准的四位年份  
YYYY 四位年份  
YYY,YY,Y 年份的最后三位,两位,一位  
HH 小时,按12小时计  
HH24 小时,按24小时计  
MI 分  
SS 秒  
MM 月  
Mon 月份的简写  
Month 月份的全名  
W 该月的第几个星期  
WW 年中的第几个星期  1.日期时间间隔操作 
当前时间减去7分钟的时间 
select sysdate,sysdate - interval '7' MINUTE from dual 
当前时间减去7小时的时间 
select sysdate - interval '7' hour from dual 
当前时间减去7天的时间 
select sysdate - interval '7' day from dual 
当前时间减去7月的时间 
select sysdate,sysdate - interval '7' month from dual 
当前时间减去7年的时间 
select sysdate,sysdate - interval '7' year from dual 
时间间隔乘以一个数字 
select sysdate,sysdate - 8 *interval '2' hour from dual

2.日期到字符操作

?
1
2
3
4
selectsysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')fromdual 
selectsysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss')fromdual 
selectsysdate,to_char(sysdate,'yyyy-ddd hh:mi:ss')fromdual 
selectsysdate,to_char(sysdate,'yyyy-mm iw-d hh:mi:ss')fromdual 

参考oracle的相关关文档(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)

3. 字符到日期操作

select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual

具体用法和上面的to_char差不多。

4. trunk/ ROUND函数的使用

?
1
2
3
selecttrunc(sysdate ,'YEAR')fromdual 
selecttrunc(sysdate ) fromdual 
selectto_char(trunc(sysdate ,'YYYY'),'YYYY')fromdual

2、层次查询 (Hierarical Retrival)
  1. SELECT [LEVEL],column,expr...  
  2. FROM table  
  3. [WHERE condition(s)]  
  4. [START WITH condition(s)]  
  5. [CONNECT BY PRIOR condition(s)];  

总结:
1.其中level关键字是可选的,level是层次查询的一个伪列,如果有level,必须有connect by,start with可以没有,level不可以前面加表名。
2.From之后可以是table,view 但是只能是一个table。
3.Where条件限制了查询返回的行,但是不影响层次关系,不满足条件的节点不返回。

4.Start with是表示开始节点,如果没有start with,则每行都当作root。Start with后面可以使用子查询,可以带多个条件。

5.Connect by与prior 确定一个层次查询的条件和遍历的方向(prior 确定)。

Connect by prior column_1=column_2; (其中prior表示前一个节点的意思),

--举例 prior employee_id =manager_id ,表示为 父节点employee_id =子节点的 manager_id,即从上之下 查询 。   employee_id =prior manager_id 表示向上查询

就是先由根节点,然后遍历子节点。column_1表示父key,column_2表示子key。

 即这种情况下:connect by prior 父key=子key表示自顶向下,等同于connect by 子key=prior 父key.


参考:http://jasonw68.iteye.com/blog/953106


where子句会将满足条件的节点删除,但是被删除节点的后代不会受到影响。

connect by 中加上条件会将满足条件的整个树枝包括后代都删除。




0 0
原创粉丝点击