日期函数详细说明 | ORACLE 、MySQL

 

Oracle中的时间类型只有date和TIMESTAMP,TIMESTAMP是比date更精确的类型。日期时间函数用于处理时间类型的数据,Oracle以7位数字格式来存放日期数据,包括世纪、年、月、日、小时、分钟、秒,并且默认日期显式格式为“DD-MON-YY”。在Oracle中准确来说一个礼拜是从星期日开始到星期六结束的,其中时间差以天数为单位。

SYSDATE:取得当前的日期和时间,类型是DATE.它没有参数.但在分布式SQL语句中使用时,SYSDATE返回本地数据库的日期和时间.
SYSTIMESTAMP:9i新增函数,返回当前系统的日期时间及时区。

一、Oracle

1、多种日期格式
YYYY:四位表示的年份
YYY,YY,Y:年份的最后三位、两位或一位,缺省为当前世纪
IYYY:ISO标准的四位年份
MM:01~12的月份编号
MON:缩写字符集表示
MONTH:全拼字符集表示的月份,右边用空格填补
Q:季度
W:当月第几周
WW:当年第几周
IW:ISO标准的年中的第几周
D:当周第几天
DD:当月第几天
DDD:当年第几天
DY:缩写字符集表示
DAY:全拼字符集表示的天 如(星期六)
HH,HH12:一天中的第几个小时,12进制表示法
HH24:一天中的第几个小时,取值为00~23
MI:一小时中的分钟
SS:一分钟中的秒
SSSS:从午夜开始过去的秒数

实例:

select to_char(sysdate, 'yyyy') 年,
       to_char(sysdate, 'mm') 月,
       to_char(sysdate, 'DD') 日,
       to_char(sysdate, 'HH24') 时,
       to_char(sysdate, 'MI') 分,
       to_char(sysdate, 'SS') 秒,
       to_char(sysdate, 'DAY') 天,
       to_char(sysdate, 'Q') 第几季度,
       to_char(sysdate, 'W') 当月第几周,
       to_char(sysdate, 'WW') 当年第几周,
       to_char(sysdate, 'D') 当周第几天,
       to_char(sysdate, 'DDD') 当年第几天    
from dual

2、两个转换函数:to_date(char[fmt[,'nls_param’]]),to_char(date[,fmt,[,nls_param]]) 

1)to_date(char[fmt[,'nls_param’]]):将字符类型按一定格式转化为日期类型

--将字符串转换为日期/时间为空的用法/也可以指定返回日期所使用的语言
select to_date('2004-11-27', 'yyyy-mm-dd'),
       to_date(null),
       to_date('2004-11-27', 'yyyy-mm-dd', 'NLS_DATE_LANGUAGE=American')
  from dual;

2)to_char(date[,fmt,[,nls_param]]):将日期转按一定格式换成字符类型 ,fmt,nls_param为可选项,fmt指定了要转化的格式,nls_param指定了返回日期所使用的语言 

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') time from dual; 

3)求某天是星期几

select to_char(to_date('2018-05-11', 'yyyy-mm-dd'), 'DAY'),
       to_char(to_date('2018-05-11', 'yyyy-mm-dd'),
               'DAY',
               'NLS_DATE_LANGUAGE=American')
  from dual;

4)设置日期语言:也就是设置nls_session_parameters视图的值 

查看参数值:
select * from nls_session_parameters where parameter = 'NLS_DATE_LANGUAGE';

修改时间以什么区域方式显示,比如是要显示MONDAY还是要显示星期一:
alter session set NLS_DATE_LANGUAGE='American';

日期格式: 
alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';

3、TO_TIMESTAMP(char[fmt[,'nls_param’]])、TO_TIMESTAMP_TZ(char[fmt[,’nls_param’]])函数

select to_timestamp('01-5月-18 07.46.41.000000000 上午','dd-MON-yy hh:mi:ss.ff AM') from dual;
--date型转成timestamp
select cast(sysdate as timestamp) date_to_timestamp from dual;
--将符合特定日期和时间格式的字符串转变为TIMESTAMP WITH TIME ZONE类型。
Select TO_TIMESTAMP_TZ('2018-05-14','yyyy-mm-dd') from dual;

4、current_date、current_timestamp、localtimestamp、sessiontimezone、dbtimezone函数 

current_date:9i新增函数,返回当前会话时区所对应的日期时间(date型)
current_timestamp:以 timestamp with time zone 数据类型返回当前会话时区所对应的日期时间。
localtimestamp:返回当前会话时区的日期时间
sessiontimezone:返回会话时区(字符型)
dbtimezone:返回数据库所在时区 

SELECT current_date,current_timestamp,localtimestamp,sessiontimezone,dbtimezone from dual;

ZOON时区:
GMT:格林威治时间(老的时间计量标准)
UTC:协调世界时间(我们现在用的时间标准),比GTM更加标准,UTC=GMT
CST:中央标准时间 CDT:中部夏令时
PST:太平洋时间 PDT:太平洋夏令时
EST: 东部标准时间 EDT:东部夏令时间 EST=UTC-5; 

5、NEW_TIME(date,timezone1,timezone2)

计算当时区timezone1中的日期和时间是date时候,返回时区timezone2中的日期和时间 

select NEW_TIME(to_date('2018-05-14 12:00:00', 'yyyy-mm-dd hh24:mi:ss'),
                'GMT',
                'EST'),
       to_date('2018-05-14 12:00:00', 'yyyy-mm-dd hh24:mi:ss')
  from dual;

6、ADD_MONTHS(d,n)函数

在某一个日期d上,加上指定的月数n,n可以是任意整数。返回计算后的新日期 

select SYSDATE,add_months(SYSDATE,-2),add_months(sysdate,2) from dual;

7、floor函数:计算两个日期间的天数 

select floor(to_date('2018-05-03 20:00:00', 'yyyy-mm-dd hh24:mi:ss') -
             to_date('2018-05-01 12:00:00', 'yyyy-mm-dd hh24:mi:ss')) A
  from dual;

8、NumtoDSinterval(n,char_expr)函数

将数字n转换为INTERNAL DAY TO SECOND(内部时间)格式;char_expr是一个字符串,可以是DAY\HOUR\MINUTE或SECOND。【DS表示 DAY——>SECOND】 

select sysdate,sysdate+numtoDSinterval(3,'hour') from dual;

 

 

二、MySQL

 

posted @ 2019-05-28 14:28  航松先生  阅读(706)  评论(0)    收藏  举报