共三部分:
第一部分:oracle sql日期比较:
第二部分:Oracle 获取当前日期及日期格式
第三部分:
获取昨天:
select trunc(SYSDATE-1) from dual;
检查一下:
select to_char (trunc(SYSDATE-1),'yyyy-mm-dd HH24:MI:SS') from
dual;
获取上个月第一天00:00:00:
select add_months(trunc(sysdate,'MON'),-1) from
dual
select add_months(trunc(sysdate,'MON'),-13) from
dual也可以
获取上个月今天00:00:00:
SELECT trunc(add_months(sysdate,-1))FROM dual
获得本季度第一天
SELECT TRUNC(add_months(SYSDATE,0),'Q') FROM dual
获得上季度第一天
SELECT TRUNC(add_months(SYSDATE,-3),'Q') FROM dual
获得去年1月1日
to_char(add_months(trunc(sysdate, 'Year'), -12), 'YYYY-MM-DD')
between and 前面的时间小后面的时间大
to_date('20110105','YYYYMMDD')-7 此处 -7代表天
第四部分:
第一部分:oracle sql日期比较:
oracle sql日期比较:
在今天之前:
select*fromup_datewhereupdate<to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')select*fromup_datewhereupdate<=to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')
在今天之后:
select*fromup_datewhereupdate>to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')select*fromup_datewhereupdate>=to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')
精确时间:
select*fromup_datewhereupdate=to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')
在某段时间内:
select*fromup_datewhereupdatebetweento_date('2007-07-07 00:00:00','yyyy-mm-dd hh24:mi:ss')andto_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')select*fromup_datewhereupdate<to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')andupdate>to_date('2007-07-07 00:00:00','yyyy-mm-dd hh24:mi:ss')select*fromup_datewhereupdate<=to_date('2007-09-07 00:00:00','yyyy-mm-dd hh24:mi:ss')andupdate>=to_date('2007-07-07 00:00:00','yyyy-mm-dd hh24:mi:ss')
格式化日期输出格式:
to_char(w.sample_time, 'yyyy-mm-dd ')
第二部分:Oracle 获取当前日期及日期格式
Oracle
获取当前日期及日期格式
获取系统日期: SYSDATE() 格式化日期: TO_CHAR(SYSDATE(),'YY/MM/DD
HH24:MI:SS) 或 TO_DATE(SYSDATE(),'YY/MM/DD
HH24:MI:SS) 格式化数字: TO_NUMBER
注:
TO_CHAR 把日期或数字转换为字符串 TO_CHAR(number,
'格式') TO_CHAR(salary,
'$99,999.99') TO_CHAR(date,
'格式')
TO_DATE 把字符串转换为数据库中的日期类型
TO_DATE(char,
'格式')
TO_NUMBER 将字符串转换为数字 TO_NUMBER(char,
'格式')
返回系统日期,输出 25-12月-09
select sysdate
from dual;
mi是分钟,输出 2009-12-25 14:23:31
select
to_char(sysdate,'yyyy-MM-dd HH24:mi:ss')
from dual;
mm会显示月份,输出 2009-12-25 14:12:31 select
to_char(sysdate,'yyyy-MM-dd HH24:mm:ss')
from dual;
输出 09-12-25 14:23:31
select
to_char(sysdate,'yy-mm-dd hh24:mi:ss') from
dual输出 2009-12-25 14:23:31
select
to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh24:mi:ss')
from dual而如果把上式写作:
select
to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh:mi:ss')
from dual
则会报错,因为小时hh是12进制,14为非法输入,不能匹配。
输出 $10,000,00 :
select
to_char(1000000,'$99,999,99') from dual;
输出 RMB10,000,00 : select
to_char(1000000,'L99,999,99') from dual;
输出 1000000.12 :
select
trunc(to_number('1000000.123'),2) from dual;select
to_number('1000000.123') from dual;
转换的格式:
表示 year 的:y 表示年的最后一位 、
yy
表示年的最后2位 、 yyy
表示年的最后3位 、
yyyy
用4位数表示年
表示month的: mm 用2位数字表示月 、
mon
用简写形式, 比如11月或者nov 、
month
用全称, 比如11月或者november
表示day的:dd 表示当月第几天
、
ddd
表示当年第几天 、
dy 当周第几天,简写,
比如星期五或者fri 、
day
当周第几天,全称, 比如星期五或者friday
表示hour的:hh 2位数表示小时
12进制、 hh24
2位数表示小时 24小时
表示minute的:mi 2位数表示分钟
表示second的:ss 2位数表示秒 60进制
表示季度的:q 一位数 表示季度 (1-4)
另外还有ww 用来表示当年第几周 w用来表示当月第几周。
24小时制下的时间范围:00:00:00-23:59:59
12小时制下的时间范围:1:00:00-12:59:59
数字格式: 9 代表一个数字 0 强制显示0 $ 放置一个$符 L 放置一个浮动本地货币符 . 显示小数点 , 显示千位指示符
补充:
当前时间减去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 '7' hour from dual;
含义解释: Dual伪列
Dual
是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的select语句块中。
不同系统可能返回日期的格式不一样。
返回当前连接的用户:select
user from dual;
第四部分:
常用的时间格式 在oracle中有 yyyy-mm-dd
hh24:mi:ss 而在Java中有些区别 为yyyy-MM-dd HH:mm:ss
这点还是经常容易模糊的。
相信很多人都有过统计某些数据的经历,比如,要统计财务的情况,可能要按每年,每季度,每月,甚至每个星期来分别统计。那在oracle中应该怎么来写sql语句呢,这个时候Oracle的日期函数会给我们很多帮助。
常用日期型函数 1。Sysdate 当前日期和时间
SQL> Select sysdate from dual;
SYSDATE
----------
21-6月 -05
2。Last_day 本月最后一天 SQL> Select last_day(sysdate) from dual;
LAST_DAY(S
----------
30-6月 -05
3。Add_months(d,n) 当前日期d后推n个月 用于从一个日期值增加或减少一些月份 date_value:=add_months(date_value,number_of_months)
SQL> Select add_months(sysdate,2) from dual;
ADD_MONTHS
----------
21-8月 -05
4。Months_between(f,s) 日期f和s间相差月数 SQL> select months_between(sysdate,to_date('2005-11-12','yyyy-mm-dd'))from dual;
MONTHS_BETWEEN(SYSDATE,TO_DATE('2005-11-12','YYYY-MM-DD'))
----------------------------------------------------------
-4.6966741 5。NEXT_DAY(d, day_of_week)
返回由"day_of_week"命名的,在变量"d"指定的日期之后的第一个工作日的日期。参数"day_of_week"必须为该星期中的某一天。
SQL> SELECT next_day(to_date('20050620','YYYYMMDD'),1) FROM dual;
NEXT_DAY(T
----------
26-6月 -05
6。current_date()返回当前会话时区中的当前日期 date_value:=current_date SQL> column sessiontimezone for a15 SQL> select sessiontimezone,current_date from dual; SESSIONTIMEZONE CURRENT_DA --------------- ---------- +08:00 13-11月-03 SQL> alter session set time_zone='-11:00' 2 / 会话已更改。 SQL> select sessiontimezone,current_timestamp from dual; SESSIONTIMEZONE CURRENT_TIMESTAMP --------------- ------------------------------------ -11:00 12-11月-03 04.59.13.668000 下午 -11:00 7。current_timestamp()以timestamp with time zone数据类型返回当前会话时区中的当前日期
SQL> select current_timestamp from dual;
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
21-6月 -05 10.13.08.220589 上午 +08:00
8。dbtimezone()返回时区
SQL> select dbtimezone from dual;
DBTIME
------
-08:00
9。extract()找出日期或间隔值的字段值 date_value:=extract(date_field from [datetime_value|interval_value]) SQL> select extract(month from sysdate) "This Month" from dual;
This Month
----------
6
SQL> select extract(year from add_months(sysdate,36)) " Years" from dual;
Years
----------
2008
10。localtimestamp()返回会话中的日期和时间 SQL> select localtimestamp from dual;
LOCALTIMESTAMP
---------------------------------------------------------------------------
21-6月 -05 10.18.15.855652 上午
常用日期数据格式(该段为摘抄)
Y或YY或YYY 年的最后一位,两位或三位 Select to_char(sysdate,’YYY’) from dual; 002表示2002年 SYEAR或YEAR SYEAR使公元前的年份前加一负号 Select to_char(sysdate,’SYEAR’) from dual; -1112表示公元前111 2年 Q 季度,1~3月为第一季度 Select to_char(sysdate,’Q’) from dual; 2表示第二季度① MM 月份数 Select to_char(sysdate,’MM’) from dual; 12表示12月 RM 月份的罗马表示 Select to_char(sysdate,’RM’) from dual; IV表示4月