Oracle常用日期处理

Oracle 日期时间格式化不准的问题, hh24:mi:ss 才是正确的写法 在设计数据库的时候,有些字段会默认取数据库的时间 sysdate,对 sysdate格式化的时候,记录下 Oracle 中的坑, to_char(sysdate, 'yyyyMMdd hh24:mm:ss') ---错误的方式 to_char(sysdate, 'yyyyMMdd hh24:mi:ss') ---正确的方式 这种习惯的写法 to_char(sysdate, 'yyyyMMdd hh24:mm:ss') 中的 m ,有点傻,oracle分不清是月份 m, 还是分钟 m,所以分钟中的m 他取的月份,造成比较诡异的时间。。。 正常的写法是把分钟用 mi 表示(min分钟的简写), 立即下载
多种日期格式:

YYYY:四位表示的年份 
YYY,YY,Y:年份的最后三位、两位或一位,缺省为当前世纪 
MM:01~12的月份编号 
MONTH:九个字符表示的月份,右边用空格填补 
MON:三位字符的月份缩写 
WW:一年中的星期 
D:星期中的第几天 
DD:月份中的第几天 
DDD:年所中的第几天 
DAY:九个字符表示的天的全称,右边用空格补齐 
HH,HH12:一天中的第几个小时,12进制表示法 
HH24:一天中的第几个小时,取值为00~23 
MI:一小时中的分钟 
SS:一分钟中的秒 
SSSSS:从午夜开始过去的秒数 


设置日期语言  
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';  

一。基本运算部分

A)to_char函数
1. 年的运算
1.1 Y或YY或YYY 年的最后一位,两位或三位,YYYY 四位年份,IYYY ISO标准的四位年份

SQL> Select to_char(sysdate,'Y'),to_char(sysdate,'YY'),to_char(sysdate,'YYY'),to_char(sysdate,'YYYY'),TO_CHAR(SYSTIMESTAMP, 'IYYY') from dual;

TO_CHAR(SYSDATE,'Y') TO_CHAR(SYSDATE,'YY') TO_CHAR(SYSDATE,'YYY') TO_CHAR(SYSDATE,'YYYY') TO_CHAR(SYSTIMESTAMP,'IYYY')
-------------------- --------------------- ---------------------- ----------------------- ----------------------------
9                    09                    009                    2009                    2009

1.2 YEAR
SQL> SELECT TO_CHAR(SYSTIMESTAMP, 'YEAR') from dual;

TO_CHAR(SYSTIMESTAMP,'YEAR')
------------------------------------------
TWO THOUSAND NINE
SQL> SELECT TO_CHAR(SYSTIMESTAMP, 'YEAR','NLS_DATE_LANGUAGE = American') from dual;

TO_CHAR(SYSTIMESTAMP,'YEAR','N
------------------------------------------
TWO THOUSAND NINE

2.Q 季度 1~3月为第一季度,2表示第二季度。

SQL> Select to_char(sysdate,'Q') from dual;

TO_CHAR(SYSDATE,'Q')
--------------------
1

3. 月份数
3.1 MM 月份数

SQL> Select to_char(sysdate,'MM') from dual;

TO_CHAR(SYSDATE,'MM')
---------------------
02

3.2 Month 用9个字符长度表示的月份名

SQL> Select to_char(sysdate,'Month') from dual;

TO_CHAR(SYSDATE,'MONTH')
------------------------
2月

3.3 月份函数汇总:
SQL> Select to_char(sysdate,'Month'),
  2   to_char(sysdate,'mon'),
  3   to_char(sysdate,'Month'),
  4   to_char(sysdate,'mon','NLS_DATE_LANGUAGE = American'),   --三位字符的月份缩写全部小写
  5   to_char(sysdate,'Mon','NLS_DATE_LANGUAGE = American'),   --三位字符的月份缩写首字母大些
  6   to_char(sysdate,'MON','NLS_DATE_LANGUAGE = American'),   --三位字符的月份缩写全部大些
  7   to_char(sysdate,'month','NLS_DATE_LANGUAGE = American'), --九个字符表示的月份,右边用空格填补全部小写
  8   to_char(sysdate,'Month','NLS_DATE_LANGUAGE = American'), --九个字符表示的月份,右边用空格填补首字母大些
  9   to_char(sysdate,'MONTH','NLS_DATE_LANGUAGE = American')  --九个字符表示的月份,右边用空格填补全部大些
10   FROM dual;

TO_CHAR(SYSDATE,'MONTH') TO_CHAR(SYSDATE,'MON') TO_CHAR(SYSDATE,'MONTH') TO_CHAR(SYSDATE,'MON','NLS_DAT TO_CHAR(SYSDATE,'MON','NLS_DAT TO_CHAR(SYSDATE,'MON','NLS_DAT TO_CHAR(SYSDATE,'MONTH','NLS_D TO_CHAR(SYSDATE,'MONTH','NLS_D TO_CHAR(SYSDATE,'MONTH','NLS_D
------------------------ ---------------------- ------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------
2月                      2月                    2月                      feb                            Feb                            FEB                            february                       February                       FEBRUARY

3.4.RM 月份的罗马表示 (V在罗马数字中表示 5)

SQL> Select to_char(sysdate,'RM') from dual;

TO_CHAR(SYSDATE,'RM')
---------------------
II

4 周的运算
4.1 WW 当年第几周 (2009年2月27日为2009年的第9周)

SQL> Select to_char(sysdate,'WW') from dual;

TO_CHAR(SYSDATE,'WW')
---------------------
09

SQL>

4.2 W 本月第几周 (2009年2月27日为2月第4周)

SQL> Select to_char(sysdate,'W') from dual;

TO_CHAR(SYSDATE,'W')
--------------------
4

6. 天的运算
6.1 DDD 当年第几天 (2009年2月27日为2009年第58天)

SQL> Select to_char(sysdate,'DDD') from dual;

TO_CHAR(SYSDATE,'DDD')
----------------------
058

6.2 DD 当月第几天 (2009年2月27日为2月的第27天)

SQL> Select to_char(sysdate,'DD') from dual;

TO_CHAR(SYSDATE,'DD')
---------------------
27

6.3 D 周内第几天 (2009年2月27日为这一周的第6天,周五)
数据字显示和星期对应关系如下)
1  2  3  4  5  6  7 
日 一 二 三 四 五 六

SQL> Select to_char(sysdate,'D') from dual;

TO_CHAR(SYSDATE,'D')
--------------------
6

6.4 DAY 中文(英文)的星期几 ( 2009年2月27日为星期五)

SQL> Select to_char(sysdate,'DAY') from dual;

TO_CHAR(SYSDATE,'DAY')
----------------------
星期五

6.5 DY 中文(英文)的星期几 ( 2009年2月27日为星期五)

SQL> Select to_char(sysdate,'DY') from dual;

TO_CHAR(SYSDATE,'DY')
---------------------
星期五

6.6 日函数运算汇总:
SQL> Select
  2  to_char(sysdate,'D'),
  3  to_char(sysdate,'DD'),
  4  to_char(sysdate,'DDD'),
  5  to_char(sysdate,'dy','NLS_DATE_LANGUAGE = American'),
  6  to_char(sysdate,'Dy','NLS_DATE_LANGUAGE = American'),
  7  to_char(sysdate,'DY','NLS_DATE_LANGUAGE = American'),
  8  to_char(sysdate,'day','NLS_DATE_LANGUAGE = American'),
  9  to_char(sysdate,'Day','NLS_DATE_LANGUAGE = American'),
10  to_char(sysdate,'DAY','NLS_DATE_LANGUAGE = American') from dual;

TO_CHAR(SYSDATE,'D') TO_CHAR(SYSDATE,'DD') TO_CHAR(SYSDATE,'DDD') TO_CHAR(SYSDATE,'DY','NLS_DATE TO_CHAR(SYSDATE,'DY','NLS_DATE TO_CHAR(SYSDATE,'DY','NLS_DATE TO_CHAR(SYSDATE,'DAY','NLS_DAT TO_CHAR(SYSDATE,'DAY','NLS_DAT TO_CHAR(SYSDATE,'DAY','NLS_DAT
-------------------- --------------------- ---------------------- ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------
6                    27                    058                    fri                            Fri                            FRI                            friday                         Friday                         FRIDAY

SQL> Select
  2  to_char(sysdate,'D')||chr(10)||
  3  to_char(sysdate,'DD')||chr(10)||
  4  to_char(sysdate,'DDD')||chr(10)||
  5  to_char(sysdate,'dy','NLS_DATE_LANGUAGE = American')||chr(10)||
  6  to_char(sysdate,'Dy','NLS_DATE_LANGUAGE = American')||chr(10)||
  7  to_char(sysdate,'DY','NLS_DATE_LANGUAGE = American')||chr(10)||
  8  to_char(sysdate,'day','NLS_DATE_LANGUAGE = American')||chr(10)||
  9  to_char(sysdate,'Day','NLS_DATE_LANGUAGE = American')||chr(10)||
10  to_char(sysdate,'DAY','NLS_DATE_LANGUAGE = American') from dual;

TO_CHAR(SYSDATE,'D')||CHR(10)|
--------------------------------------------------
6
27
058
fri
Fri
FRI
friday
Friday
FRIDAY

7 小时的运算
7.1.HH或HH12 12进制小时数 (16:09分为用12小时制计时为4点)

SQL> Select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate,'HH') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DDHH2 TO_CHAR(SYSDATE,'HH')
------------------------------ ---------------------
2009-02-28 10:58:54            10

7.2.HH24 24小时制

SQL> Select to_char(sysdate+0.5,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+0.5,'HH'),to_char(sysdate+0.5,'HH24') from dual;

TO_CHAR(SYSDATE+0.5,'YYYY-MM-D TO_CHAR(SYSDATE+0.5,'HH') TO_CHAR(SYSDATE+0.5,'HH24')
------------------------------ ------------------------- ---------------------------
2009-02-28 22:59:49            10                        22

8 上下午的运算

SQL> SELECT TO_CHAR(SYSTIMESTAMP, 'AM','NLS_DATE_LANGUAGE = American'),TO_CHAR(SYSTIMESTAMP, 'AM'),
  2  TO_CHAR(SYSTIMESTAMP, 'PM','NLS_DATE_LANGUAGE = American'),TO_CHAR(SYSTIMESTAMP, 'PM'),
  3  TO_CHAR(SYSTIMESTAMP+0.5, 'PM','NLS_DATE_LANGUAGE = American'),TO_CHAR(SYSTIMESTAMP+0.5, 'PM') from dual;

TO_CHAR(SYSTIMESTAMP,'AM','NLS TO_CHAR(SYSTIMESTAMP,'AM') TO_CHAR(SYSTIMESTAMP,'PM','NLS TO_CHAR(SYSTIMESTAMP,'PM') TO_CHAR(SYSTIMESTAMP+0.5,'PM', TO_CHAR(SYSTIMESTAMP+0.5,'PM')
------------------------------ -------------------------- ------------------------------ -------------------------- ------------------------------ ------------------------------
AM                             上午                       AM                             上午                       PM                             下午

9 MI:一小时中的分钟 Minute (0-59).

SQL> Select to_char(sysdate,'mi') from dual;

TO_CHAR(SYSDATE,'MI')
---------------------
54

10 秒的运算
10.1 SS:一分钟中的秒 ,SSSSs:从午夜开始过去的秒数 

SQL> Select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate,'ss'),to_char(sysdate,'SSSSS') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DDHH2 TO_CHAR(SYSDATE,'SS') TO_CHAR(SYSDATE,'SSSSS')
------------------------------ --------------------- ------------------------
2009-02-28 11:06:04            04                    39964

10.2 这个好像取到6位就行了 

SQL> SELECT to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')||chr(10)||
  2  TO_CHAR(SYSTIMESTAMP, 'SS.FF1')||chr(10)||TO_CHAR(SYSTIMESTAMP, 'SS.FF2')||chr(10)||TO_CHAR(SYSTIMESTAMP, 'SS.FF3')||chr(10)||
  3  TO_CHAR(SYSTIMESTAMP, 'SS.FF4')||chr(10)||TO_CHAR(SYSTIMESTAMP, 'SS.FF5')||chr(10)||TO_CHAR(SYSTIMESTAMP, 'SS.FF6')||chr(10)||
  4  TO_CHAR(SYSTIMESTAMP, 'SS.FF7')||chr(10)||TO_CHAR(SYSTIMESTAMP, 'SS.FF8')||chr(10)||TO_CHAR(SYSTIMESTAMP, 'SS.FF9') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DDHH2
--------------------------------------------------------------------------------
2009-02-28 11:14:21
21.8
21.81
21.810
21.8100
21.81002
21.810022
21.8100220
21.81002200
21.810022000


B)trunc()函数,都是对数据向前取整

1. 计算小时,分,秒,毫秒

SQL> SELECT DAYS,
  2         A,
  3         TRUNC(A * 24) HOURS,
  4         TRUNC(A * 24 * 60 - 60 * TRUNC(A * 24)) MINUTES,
  5         TRUNC(A * 24 * 60 * 60 - 60 * TRUNC(A * 24 * 60)) SECONDS,
  6         TRUNC(A * 24 * 60 * 60 * 100 - 100 * TRUNC(A * 24 * 60 * 60)) MSECONDS
  7    FROM (SELECT TRUNC(SYSDATE) DAYS, SYSDATE - TRUNC(SYSDATE) A FROM DUAL);

DAYS                 A      HOURS    MINUTES    SECONDS   MSECONDS
----------- ---------- ---------- ---------- ---------- ----------
2009-2-28   0.56979166         13         40         30          0

2. 世纪第一天
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,trunc(SYSDATE,'cc') from dual;

NOW                 TRUNC(SYSDATE,'CC')
------------------- -------------------
2009-02-28 13:51:30 2001-1-1

3. 年的第一天
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,
  2          trunc(SYSDATE,'SYYYY'), trunc(SYSDATE,'YYYY'),
  3          trunc(SYSDATE,'YEAR'),  trunc(SYSDATE,'SYEAR'),
  4          trunc(SYSDATE,'YYY'),   trunc(SYSDATE,'YY'), trunc(SYSDATE,'Y')
  5          from dual;

NOW                 TRUNC(SYSDATE,'SYYYY') TRUNC(SYSDATE,'YYYY') TRUNC(SYSDATE,'YEAR') TRUNC(SYSDATE,'SYEAR') TRUNC(SYSDATE,'YYY') TRUNC(SYSDATE,'YY') TRUNC(SYSDATE,'Y')
------------------- ---------------------- --------------------- --------------------- ---------------------- -------------------- ------------------- ------------------
2009-02-28 13:52:51 2009-1-1               2009-1-1              2009-1-1              2009-1-1               2009-1-1             2009-1-1            2009-1-1

4. 季度第一天

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,trunc(SYSDATE,'q'),trunc(SYSDATE+100,'q')from dual; 

NOW                 TRUNC(SYSDATE,'Q') TRUNC(SYSDATE+100,'Q')
------------------- ------------------ ----------------------
2009-02-28 14:07:03 2009-1-1           2009-4-1

5. 月份的第一天

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,trunc(SYSDATE,'MONTH'),trunc(SYSDATE,'MON'),trunc(SYSDATE,'MM'),trunc(SYSDATE,'RM') from dual; 

NOW                 TRUNC(SYSDATE,'MONTH') TRUNC(SYSDATE,'MON') TRUNC(SYSDATE,'MM') TRUNC(SYSDATE,'RM')
------------------- ---------------------- -------------------- ------------------- -------------------
2009-02-28 14:09:08 2009-2-1               2009-2-1             2009-2-1            2009-2-1

6 周

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,trunc(SYSDATE,'WW'),trunc(SYSDATE,'W')from dual; 

NOW                 TRUNC(SYSDATE,'WW') TRUNC(SYSDATE,'W')
------------------- ------------------- ------------------
2009-02-28 14:13:43 2009-2-26           2009-2-22

6.2 周的第一天

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,trunc(SYSDATE,'DAY'),trunc(SYSDATE,'DY'),trunc(SYSDATE,'D')  from dual; 

NOW                 TRUNC(SYSDATE,'DAY') TRUNC(SYSDATE,'DY') TRUNC(SYSDATE,'D')
------------------- -------------------- ------------------- ------------------
2009-02-28 14:24:31 2009-2-22            2009-2-22           2009-2-22

9. 天
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,trunc(SYSDATE,'DDD'),trunc(SYSDATE,'DD'),trunc(SYSDATE,'J')  from dual; 

NOW                 TRUNC(SYSDATE,'DDD') TRUNC(SYSDATE,'DD') TRUNC(SYSDATE,'J')
------------------- -------------------- ------------------- ------------------
2009-02-28 14:21:41 2009-2-28            2009-2-28           2009-2-28

10 小时

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,trunc(SYSDATE,'HH'),trunc(SYSDATE,'HH12'),trunc(SYSDATE,'HH24')  from dual; 

NOW                 TRUNC(SYSDATE,'HH') TRUNC(SYSDATE,'HH12') TRUNC(SYSDATE,'HH24')
------------------- ------------------- --------------------- ---------------------
2009-02-28 14:26:39 2009-2-28 14:00:00  2009-2-28 14:00:00    2009-2-28 14:00:00   

11 分
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,trunc(SYSDATE,'MI')  from dual; 

NOW                 TRUNC(SYSDATE,'MI')
------------------- -------------------
2009-02-28 14:31:37 2009-2-28 14:31:00

C) round()函数 和trunc函数类似,部分取值向后取整
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,round(SYSDATE,'cc') from dual;

NOW                 ROUND(SYSDATE,'CC')
------------------- -------------------
2009-02-28 14:33:10 2001-1-1
SQL> select round(SYSDATE,'cc') from dual;

ROUND(SYSDATE,'CC')
-------------------
2001-1-1
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,
  2          round(SYSDATE,'SYYYY'), round(SYSDATE,'YYYY'),
  3          round(SYSDATE,'YEAR'),  round(SYSDATE,'SYEAR'),
  4          round(SYSDATE,'YYY'),   round(SYSDATE,'YY'), round(SYSDATE,'Y')
  5          from dual;

NOW                 ROUND(SYSDATE,'SYYYY') ROUND(SYSDATE,'YYYY') ROUND(SYSDATE,'YEAR') ROUND(SYSDATE,'SYEAR') ROUND(SYSDATE,'YYY') ROUND(SYSDATE,'YY') ROUND(SYSDATE,'Y')
------------------- ---------------------- --------------------- --------------------- ---------------------- -------------------- ------------------- ------------------
2009-02-28 14:33:11 2009-1-1               2009-1-1              2009-1-1              2009-1-1               2009-1-1             2009-1-1            2009-1-1
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,round(SYSDATE,'Q')from dual;

NOW                 ROUND(SYSDATE,'Q')
------------------- ------------------
2009-02-28 14:33:11 2009-4-1
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,round(SYSDATE,'q'),round(SYSDATE+100,'q')from dual;

NOW                 ROUND(SYSDATE,'Q') ROUND(SYSDATE+100,'Q')
------------------- ------------------ ----------------------
2009-02-28 14:33:11 2009-4-1           2009-7-1
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,round(SYSDATE,'MONTH'),round(SYSDATE,'MON'),round(SYSDATE,'MM'),round(SYSDATE,'RM') from dual;

NOW                 ROUND(SYSDATE,'MONTH') ROUND(SYSDATE,'MON') ROUND(SYSDATE,'MM') ROUND(SYSDATE,'RM')
------------------- ---------------------- -------------------- ------------------- -------------------
2009-02-28 14:33:11 2009-3-1               2009-3-1             2009-3-1            2009-3-1
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,round(SYSDATE,'WW'),round(SYSDATE,'W')from dual;

NOW                 ROUND(SYSDATE,'WW') ROUND(SYSDATE,'W')
------------------- ------------------- ------------------
2009-02-28 14:33:11 2009-2-26           2009-3-1
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,round(SYSDATE,'DDD'),round(SYSDATE,'DD'),round(SYSDATE,'J')  from dual;

NOW                 ROUND(SYSDATE,'DDD') ROUND(SYSDATE,'DD') ROUND(SYSDATE,'J')
------------------- -------------------- ------------------- ------------------
2009-02-28 14:33:11 2009-3-1             2009-3-1            2009-3-1
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,round(SYSDATE,'DAY'),round(SYSDATE,'DY'),round(SYSDATE,'D')  from dual;

NOW                 ROUND(SYSDATE,'DAY') ROUND(SYSDATE,'DY') ROUND(SYSDATE,'D')
------------------- -------------------- ------------------- ------------------
2009-02-28 14:33:11 2009-3-1             2009-3-1            2009-3-1
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,round(SYSDATE,'HH'),round(SYSDATE,'HH12'),round(SYSDATE,'HH24')  from dual;

NOW                 ROUND(SYSDATE,'HH') ROUND(SYSDATE,'HH12') ROUND(SYSDATE,'HH24')
------------------- ------------------- --------------------- ---------------------
2009-02-28 14:33:11 2009-2-28 15:00:00  2009-2-28 15:00:00    2009-2-28 15:00:00
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,round(SYSDATE,'MI')  from dual;

NOW                 ROUND(SYSDATE,'MI')
------------------- -------------------
2009-02-28 14:33:11 2009-2-28 14:33:00


D)TO_DATE使用详解
时常使用to_date函数来查询特定时间内的数据。 
语法:
TO_DATE(x [, format])用于将字符串x转换为时间值,该函数可以指定一个可选的字符串format参数来说明x的格式。
如果没有指定format参数,日期就使用默认的数据库格式(通常是DD-MON-YYYY或DD-MON-YY)。

注意:

数据库参数NLS_DATE_FORMAT指定了默认的日期格式。可以修改NLS_DATE_FORMAT的设置。

2. 指定时间

当然,在时间值中也可以指定时间。如果在时间值中没有指定时间,那么时间值的时间部分默认为12:00:00 A.M.。时间可以使用前面表5-2所示的各种格式。时间格式的一个例子是HH24:MI:SS,其中:

● HH24是一个2位数字,表示24小时格式中的小时数,该值的范围为00~23。

● MI 是一个2位数字,表示分钟,该值的范围为00~59。

● SS 是一个2位数字,表示秒,该值的范围为00~59。

使用HH24:MI:SS格式的一个时间的例子是19:23:36。使用这个时间的一个完整时间值是:

05-FEB-1968 19:32:36


这个时间值的格式为:

DD-MON-YYYY HH24:MI:SS 

to_data(date&time,format)
其中第一个参数date&time是我们要查询的具体日期和时间,比如:2006年5月21日。但是这个时间也分
为很多种精度的,比如:
2006年5月21日
2006年5月21日17:24
2006年5月21日17:34分55秒      
这个精度要根据实际情况来定。

另外一个参数format决定的日期的表示方法,比如:
2006年5月21日    可以表示为:060521、20060521、2006FEB21等等
而他们对应的format为
060521        YYMMDD
20060521      YYYYMMDD
2006FEB21     YYYYMONDD

示例:
select * from book where intime=to_date('2003/02/17/17/53/55','YYYY/MM/DD/HH24/MI/SS')

上面的语句是查询:2003年8月17日下午5点53分55秒,入库的书本。
其实用下面的写法也是可以的
select * from book where intime=to_date('20030217175355','YYYYMMDDHH24MISS')
select * from book where intime=to_date
('2003-02-17-17-53-55','YYYY-MM-DD-HH24/-I-SS')
中间的连字符"/"、":"或是"-",并不影响表达,只是为了更加容易看清楚。

表示年份有以下几种格式,及这种格式对应的表达方法:
2003年为例
YYYY        2003
YYY          003
YY            03

月份表示格式及表达方法:
二月分为例
MM          08
RM          IIX(罗马数字)
MONTH       february
MON         feb

日期的格式及表达方法:
17号为例
DDD         76          2月的17日在本年度(不是闰年的情况)是多少天     
DD          17          在本月中是号(17号)
D           在这一个星期是哪天

星期的格式和表示方法:
星期一为例
DAY         monday     全名显示 
DY          mon        缩写

小时的格式和表示方法:
HH24      18    二十四小时制

分钟的格式和表示方法:
MI        32    该小时32分钟

秒的表示方法
SS        28    该分钟28秒



二。 其他运算函数
1、add_months()用于从一个日期值增加或减少一些月份 
SQL> select add_months(sysdate,-12) "Last Year         ",to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') now,add_months(sysdate,12) "Next Year         " from dual;

Last Year          NOW                 Next Year
------------------ ------------------- ------------------
2008-2-29 14:41:54 2009-02-28 14:41:54 2010-2-28 14:41:54

2、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 

SQL> 

3、current_timestamp()以timestamp with time zone数据类型返回当前会放时区中的当前日期 
timestamp_with_time_zone_value:=current_timestamp([timestamp_precision]) 
SQL> column sessiontimezone for a15 
SQL> column current_timestamp format a36 
SQL> select sessiontimezone,current_timestamp from dual; 

SESSIONTIMEZONE CURRENT_TIMESTAMP 
--------------- ------------------------------------ 
+08:00 13-11月-03 11.56.28.160000 上午 +08:00 

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.58.00.243000 下午 -11:00 

4、dbtimezone()返回时区 
varchar_value:=dbtimezone 

SQL> select dbtimezone from dual; 

DBTIMEZONE
----------
+08:00

5、extract()找出日期或间隔值的字段值 
date_value:=extract(date_field from [datetime_value|interval_value]) 
SQL> select extract(month from sysdate) "This Month" from dual;

This Month
----------
         2

SQL> select extract(year from add_months(sysdate,36)) "3 Years Out" from dual; 

3 Years Out
-----------
       2012

6、last_day()返回包含了日期参数的月份的最后一天的日期 
date_value:=last_day(date_value) 
SQL> select last_day(sysdate) "Last day of this month" from dual; 

Last day of this month
----------------------
2009-2-28 14:54:09

7、localtimestamp()返回会话中的日期和时间 
timestamp_value:=localtimestamp 
SQL> column localtimestamp format a28
SQL> select localtimestamp from dual;

LOCALTIMESTAMP
----------------------------
28-2月 -09 02.54.55.266868 下午

SQL> select localtimestamp,current_timestamp from dual;

LOCALTIMESTAMP               CURRENT_TIMESTAMP
---------------------------- ------------------------------------
28-2月 -09 02.56.39.923571 下午 28-2月 -09 02.56.39.923571 下午 +08:00

8、months_between()判断两个日期之间的月份数量 
number_value:=months_between(date_value,date_value) 
SQL> select months_between(sysdate,date'1971-05-18') from dual;

MONTHS_BETWEEN(SYSDATE,DATE'19
------------------------------
              453.342685185185

SQL> select months_between(sysdate,date'2001-01-01') from dual;

MONTHS_BETWEEN(SYSDATE,DATE'20
------------------------------
              97.8910812425329       
              
9、next_day()给定一个日期值,返回由第二个参数指出的日子第一次出现在的日期值(应返回相应日子的名称字符串)



常用

1. 找出今年的天数  
SQL> select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual ;

ADD_MONTHS(TRUNC(SYSDATE,'YEAR
------------------------------
                           365
SQL> select add_months(trunc(to_date('20081201','yyyymmdd'),'year'), 12) - trunc(to_date('20081201','yyyymmdd'),'year') from dual ;

ADD_MONTHS(TRUNC(TO_DATE('2008
------------------------------
                           366
闰年的处理方法  
to_char( last_day( to_date('02' || :year,'mmyyyy') ), 'dd' )  
如果是28就不是闰年
从医疗成像到工业检测:CMOS图像传感器NIR技术的最新应用案例解析 本文深入解析了CMOS图像传感器NIR技术在医疗成像和工业检测中的最新应用案例。通过提升量子效率至70%,NIR技术实现了血管可视化、材料缺陷检测等突破性进展,显著提高了医疗诊断精度和工业质检效率。文章还探讨了系统集成关键考量和前沿发展趋势。 阅读详情

相关推荐

YOLOv5添加注意力机制的具体步骤

本文主要介绍了 本文在此篇博客的基础上向YOLOv5-5.0版 本文主要包括以下内容一、CBAM注意力机制添加(1)修改yolov5s主干网络(2)在common.py中添加可调用的CBAM模块(3)向yolo.py文件添加CBAMC3判断语句二、SE注意力机制添加 本文以yolov5s网络为例 一、CBAM注意力机制添加 注意力机制可以添加在backbone,Neck,Head等部分,接下来本文以backbone主干网络为例 (1)修改yolov5s主干网络 1.在yolov5-5.0工程文件夹下,找到m

thy0000的博客 2万+

Oracle日期处理整理

1.获取日期元素 注意: 1.hh24写法指24小时,Oracle默认是12小时 2.分钟用mi,不要用mm,因为与之前的MM冲突     1-12小时写法 yyyyMMdd24miss(Oracle默认)     1-24小时写法 yyyyMMddHH24miss 获取日期元素: select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’) from dual; //日期转化为字符串 select to

qq_38425803的博客 6376

Eigen 直线拟合/曲线拟合/圆拟合/椭圆拟合

使用Eigen库进行直线拟合是数据分析和科学计算中的常见任务,主要通过最小二乘法实现。该代码演示了二维空间中的直线拟合,输出斜率和截距。

深之JohnChen的专栏 1591

oracle查询日期格式转化

1、对结果集中的日期格式化 # to_char:将日期格式化为指定格式,to_number:将字符串格式化为数值类型,YYYYMMDDHH24MISS:可以转化为其他格式的,注意是12小时制的还是24小时制的,依据实际情况决定,比如where条件后的是24小时制的,在这里就是24小时制的,12小时制的为YYYYMMDDHH12MISS select id,name,to_number(to_char(ADDTIME,'YYYYMMDDHH24MISS')) from test 2、对where条件进行日期

努力改变人生 7702

EWF写保护功能详解:从安装到实战操作指南

本文详细介绍了EWF写保护功能的安装与实战操作指南。EWF(Enhanced Write Filter)通过重定向写入操作保护硬盘分区,特别适合需要长期稳定运行的系统场景。文章涵盖从安装准备、图形界面操作到命令行高级管理的全流程,并提供了常见问题的解决方案,帮助用户轻松掌握这一实用工具。

weixin_28710999的博客 446

网络工程系统CAD图:从设计到落地的关键技能与实战指南

网络工程并不只是配置路由器和交换机,真正的核心在于将设计方案转化为可施工的物理图纸。网络工程系统CAD图正是连接逻辑设计与物理世界的桥梁,它涵盖综合布线、信息点布置、桥架路由、弱电间规划等关键内容。理解并掌握这套图纸体系,是网络工程师从基础设备调试走向项目主导者、弱电总工乃至网络架构师的重要分水岭。在园区网、数据中心、智能楼宇等真实场景中,一套规范的系统CAD图直接决定了施工质量、验收效率与后期运维的可靠性。本文从基础概念出发,拆解图纸的组成层次、绘制流程和软件工作流,并结合学习路线与就业方向,帮助初学者建

weixin_33860553的博客 389

多种日期格式:

YYYY:四位表示的年份 YYY,YY,Y:年份的最后三位、两位或一位,缺省为当前世纪 MM:01~12的月份编号 MONTH:九个字符表示的月份,右边用空格填补 MON:三位字符的月份缩写 WW:一年中的星期 D:星期中的第几天 DD:月份中的第几天 DDD:年所中的第几天 DAY:九个字符表示的天的全称,右边用空格补齐 HH,HH12:一天中的第几个小时,12进制表示法 HH24:一天中的第几

vc_asp的专栏 4877

Spring-AI 第 17 章 - 飞书机器人接入详解

✅ Stream 长连接(官方 SDK)✅ AI 对话(支持工具调用)✅ 消息接收与回复✅ 天气查询✅ 数据库查询✅ 数学计算✅ 事件去重Stream 长连接模式:使用官方 SDK 建立 WebSocket 长连接,服务器主动连接飞书,无需公网 IP消息处理流程:接收消息 → 解析内容 → AI 处理 → 回复用户AI 工具调用:接入 FunctionTools,支持天气、计算、日期、数据库查询等多种工具。

AppBlog.CN全栈架构 210

ORACLE常用日期转换处理

文章来源:http://xiaobo.javaeye.com/blog/35918TO_DATE格式   Day:   dd number 12   dy abbreviated fri   day spelled out friday   ddspth spelled out, ordinal twelfth   Month:   mm number 03   mon abbreviated

fbysss的专栏 1434

Microsoft Forms功能深度解析:企业数据收集与协作的智能利器

Microsoft Forms是微软365生态中的在线表单工具,支持问卷调查、测验和投票创建,具备拖拽式界面、多题型设计和实时数据分析功能。其核心价值在于易用性、跨平台兼容性以及与Teams、SharePoint等微软服务的深度集成,满足GDPR/HIPAA等合规要求。提供表单创建、权限管理、自动化流程(通过Power Automate)和审计日志等功能,适用于金融、医疗、教育等多行业场景。虽然存在逻辑分支有限等约束,但通过案例证明能显著提升数据收集效率(达70-85%)。使用时需注意许可证配置(Busin

xueyunshengling的博客 9124

1. SAP Business Application Studio 里创建一个基于 CAP 模型的最简单的 OData 服务

本文基于 SAP Cloud Application Programming 编程模型的 OData 服务开发教程的第一步,简述了 SAP Business Technology Platform 里 Business Application Studio 开发工具的打开方式,创建 Dev Space 以及 CAP 项目的创建步骤,以及如何通过 schema.cds 和 service.cds 分别创建 OData 模型和 OData 服务,最后通过 ports preview 打开 OData 服务预览页

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1797

oracle常见日期处理函数,oracle 常用日期函数总结

1. sysdate 查看系统的当前时间select sysdate from dualSQL> select sysdate from dual;SYSDATE---------14-AUG-13回显结果受NLS_DATE_FORMAT参数的限制,这里修改下,后面的实验都以YYYY-MM-DD的结果显示SQL> alter session set nls_date_format='Y...

weixin_28892727的博客 534

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Oracle 日期格式常用处理

oracle sql日期比较: 共三部分: 第一部分:oracle sql日期比较: http://www.blogjava.net/forker/archive/2007/09/07/143467.html#Post 第二部分:Oracle 获取当前日期及日期格式 http://blog.sina.com.cn/s/blog_6168ee920100l2ye.html 第三部分:

Ivan mo programming world 926

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ORACLE-常用日期處理函數

ORACLE-常用日期處理函數 1.对日期进行格式化 select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’) from dual; 2. ddd:当前日期是当年的第几天;day:当前日期是星期几 dy:当前日期是星期几的缩写;Q:当前日期是第几个季度 WW:当前是一年内的第几周;W:当前是一月内的第几周; select to_char(sysdate,‘ddd-day-dy-Q-WW-W’) from dual; 3.英文显示日期 select to_char (sy

qq_31852245的博客 196

oracle处理日期格式,Oracle日期时间常用处理格式记录

日期和字符转换函数用法(to_date,to_char)select to_char(sysdate,'YYYY-MM-DD hh24:mi:ss') as nowTime from dual; --日期转化为字符串select to_date('2018-11-26 22:10:20','YYYY-MM-DD hh24:mi:ss') as nowDateTime from dual; -- ...

weixin_39940688的博客 151

Oracle 常用trunc处理日期用法

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;  --显示当前时间2011-12-29 16:24:34 select trunc(sysdate,'year') from dual; --截取到年(本年的第一天)2011-1-1 select trunc(sysdate,'q') from dual; --截取到季度(本...

Henry285808338的博客 506

Oracle日期时间常用处理格式记录

日期和字符转换函数用法(to_date,to_char) select to_char(sysdate,'YYYY-MM-DD hh24:mi:ss') as nowTime from dual; --日期转化为字符串 select to_date('2018-11-26 22:10:20','YYYY-MM-DD hh24:mi:ss') as nowDateTime from ...

小菜鸟的HelloWorld 691

Oracle常用日期处理函数

Months_between() --两个时间之间的月数,如下面为2011-10-10 与 2011-5-30 两个日期之间的月数10月10日-5月30日select months_between(to_date('2011-10-10','yyyy-mm-dd'),to_date('2011-5-30','yyyy-mm-dd')) from dual; Add_months() --月加减...

大志的工作学习笔记 155

(课堂笔记)Oracle 常用函数:数值、字符串、日期处理

本文系统总结了Oracle常用函数,分为数值、字符串和日期处理三大类。数值函数包括ABS、POWER、ROUND等;字符串函数涵盖REPLACE、SUBSTR、INSTR等;日期函数包含LAST_DAY、ADD_MONTHS等。文中提供了典型示例和实用技巧,如统计字符出现次数、模糊查询替代方案等。最后通过综合练习演示了函数组合应用,并给出了最佳实践建议,如日期运算优先使用MONTHS_BETWEEN、字符串拼接推荐使用"||"等。

木木的学习笔记 478

oracle中处理日期大全

TO_DATE格式 Day: dd number 12 dy abbreviated fri day spelled out friday ddspth spelled out, ordinal twelfth Month: mm number 03 mon abbreviated mar month spelled out march Year: yy two digits 98 yyyy fo

thinklys的专栏 317

Oracle日期函数

Oracle日期类型函数是操作日期、时间类型的相关数据,返回日期时间类型或数字类型结果,常用的函数有:SYSDATE()、ADD_MONTHS()、LAST_DAY()、TRUNC()、ROUND()等等。 系统日期、时间函数: SYSDATE函数:该函数没有参数,可以得到系统的当前时间。 案例代码: select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; 结果: SYSTIMESTAMP函数:该函数没有参数,可以得到系统的当.

terence的博客 6万+

oracle 日期常用函數 (SYSDATE、日期格式) 收藏

oracle 日期常用函數 (SYSDATE、日期格式) 收藏  SYSDATE   2--◎ 可得到目前系統的時間     3          4  ex.      5    select sysdate from dual;   6             7    sysdate      8  

blueman2012的专栏 8505

Oracle常用日期函数

一、常用日期函数1、Sysdate 当前日期和时间 SQL> Select sysdate from dual; 2、Last_day 本月最后一天 SQL> Select last_day(sysdate) from dual; 3、Add_months(d,n) 当前日期d后推n个月 用于从一个日期值增加或减少一些月份 date_value:=add_months(date_val

834

Oracle数据库日期的处理

Oracle SQL语句日期的使用: http://blog.youkuaiyun.com/cherayliu/article/details/8085843OracleSQL日期比较和常用日期函数: https://www.2cto.com/database/201604/501997.html

Amant 1043

ORACLE SQL日期函数

ORACLE SQL日期函数 日期函数: 日期:Oracle中的日期型数据实际含有二个值:日期和时间。 例如:函数SYSDATE返回日期和时间 日期的数学运算 在日期上加上或减去一个数字结果仍为日期。 两个日期相减返回日期之间相差的天数。 -日期不允许做加法运算,无意义 可以用数字除24来向日期中加上或减去天数。 日期不允许做加法运算,无意义(不允许日期+日期) 日期函数包括六种函数:如 M...

qq_41991743的博客 2161
上一篇: oracle数据库表空间扩容
下一篇: jpa 注解
sunjava1
博客等级 码龄15年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值