共三部分:

第一部分: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月