extract
由于业务需要,这两天在学习oracle
,发现Oracle
里面的日期它会给你转成一种很不习惯的格式,于是想着怎么样把它弄成年、月、日的格式来显示,查资料、看文档,最终找到解决办法了,其实是用到了to_char
方法。
例如,在Oracle
里面,一个表格里日期如2017-05-06
,列名为time
,查询后发现返回的是06-5月-17
这种格式的,看着贼不爽,要想把它转成年月日这种格式的,可以这样做,
to_char(time, 'YYYY-MM-DD') as time // 括号里的time表示表中的列名,第二个`time`则表示转换后的日期列名仍然为`time`
现在转换后的日期就是这样的,2017-05-06
那么extract
函数是干什么的呢?extract
英语意思是提取、选取,顾名思义,它表示从一个date
类型中截取某一特定的部分,例如,选取年或月或日。
例如有这样一个表格:
现在我要从表格myTable
中选取time
中年份为2018
年的所有数据,可以这样做,
select title,play,time from myTable where extract(year from time) = 2018;
或者:
select title,play,to_char(time, 'YYYY-MM-DD') as time from myTable where extract(year from time) = 2018
结果显然是都返回了(这里只是做个演示)
现在我要从表格myTable
中选取time
中月份为5
的所有数据,操作为:
select title,play,time from myTable extract(month from time) = 5;
或者:
select title,play,to_char(time, 'YYYY-MM-DD') as time from myTable where extract(month from time) = 5
从表格myTable
中选取time
中日期为6
的所有数据,操作为:
select title,play,time from myTable extract(day from time) = 6;
或者:
slect title,play,to_char(time, 'YYYY-MM-DD') as time from myTable where extract(day from time) = 6;
语法如下:extract(year|month|day|hour|minute|second from column_name) = value
Oracle extract
函数用法
//oracle中extract()函数从oracle 9i中引入,用于从一个date或者Interval类型中截取到特定的部分
//语法如下:
EXTRACT (
{ YEAR | MONTH | DAY | HOUR | MINUTE | SECOND }
| { TIMEZONE_HOUR | TIMEZONE_MINUTE }
| { TIMEZONE_REGION | TIMEZONE_ABBR }
FROM { date_value | interval_value } )
//我们只可以从一个date类型中截取 year,month,day(date日期的格式为yyyy-mm-dd);
//我们只可以从一个 timestamp with time zone 的数据类型中截取TIMEZONE_HOUR和TIMEZONE_MINUTE;
select extract(year from date'2011-05-17') year from dual;
YEAR
----------
2011
select extract(month from date'2011-05-17') month from dual;
MONTH
----------
5
select extract(day from date'2011-05-17') day from dual;
DAY
----------
17
//获取两个日期之间的具体时间间隔,extract函数是最好的选择
select extract(day from dt2-dt1) day
,extract(hour from dt2-dt1) hour
,extract(minute from dt2-dt1) minute
,extract(second from dt2-dt1) second
from (
select to_timestamp('2011-02-04 15:07:00','yyyy-mm-dd hh24:mi:ss') dt1
,to_timestamp('2011-05-17 19:08:46','yyyy-mm-dd hh24:mi:ss') dt2
from dual)
/
DAY HOUR MINUTE SECOND
---------- ---------- ---------- ----------
102 4 1 46
select extract(year from systimestamp) year
,extract(month from systimestamp) month
,extract(day from systimestamp) day
,extract(minute from systimestamp) minute
,extract(second from systimestamp) second
,extract(timezone_hour from systimestamp) th
,extract(timezone_minute from systimestamp) tm
,extract(timezone_region from systimestamp) tr
,extract(timezone_abbr from systimestamp) ta
from dual
/
YEAR MONTH DAY MINUTE SECOND TH TM TR TA
---------- ---------- ---------- ---------- ---------- ---------- ---------- --------- ----------
2011 5 17 7 14.843 8 0 UNKNOWN UNK
oracle
中extract()
函数—-用于截取年、月、日、时、分、秒
oracle
中extract()
函数从oracle 9i
中引入,用于从一个date
或者interval
类型中截取到特定的部分
语法如下:
extract (
{ year | month | day | hour | minute | second }
| { timezone_hour | timezone_minute }
| { timezone_region | timezone_abbr }
from { date_value | interval_value } )
只可以从一个date
类型中截取年月日
sql> select extract (year from sysdate) year, extract (month from sysdate) month, extract (day from sysdate) day from dual;
YEAR MONTH DAY
---------- ---------- ----------
2015 5 4
只可以从一个date
类型中截取年月日
SQL> select extract (year from date '2015-05-04') year, extract (month from date'2015-05-04') month, extract (day from date '2011-05-04') day from dual;
YEAR MONTH DAY
---------- ---------- ----------
2015 5 4
从timestamp
中获取年月日时分秒
select
extract(year from systimestamp) year
,extract(month from systimestamp) month
,extract(day from systimestamp) day
,extract(minute from systimestamp) minute
,extract(second from systimestamp) second
,extract(timezone_hour from systimestamp) th
,extract(timezone_minute from systimestamp) tm
,extract(timezone_region from systimestamp) tr
,extract(timezone_abbr from systimestamp) ta
from dual
获取两个日期之间的具体时间间隔
获取两个日期之间的具体时间间隔,extract
函数是最好的选择
select
extract (day from dt2 - dt1) day,
extract (hour from dt2 - dt1) hour,
extract (minute from dt2 - dt1) minute,
extract (second from dt2 - dt1) second
from
(
select
to_timestamp ('2011-02-04 15:07:00','yyyy-mm-dd hh24:mi:ss') dt1,
to_timestamp ('2011-05-17 19:08:46','yyyy-mm-dd hh24:mi:ss') dt2
from
dual
)
获取interval
类型特定部分
select extract(year from interval '21' year) year from dual
Interval 语法
interval '{ integer | integer time_expr | time_expr }'
{ { day | hour | minute } [ ( leading_precision ) ]
| second [ ( leading_precision [, fractional_seconds_precision ] ) ] }
[ to { day | hour | minute | second [ (fractional_seconds_precision) ] } ]
leading_precision
值的范围是0到9, 默认是2
. time_expr
的格式为:hh[:mi[:ss[.n]]] or mi[:ss[.n]] or ss[.n],
n
表示微秒.
范围值:
hour: 0 to 23
minute: 0 to 59
second: 0 to 59.999999999
eg:
interval '4 5:12:10.222' day to second(3) 表示: 4天5小时12分10.222秒
interval '4 5:12' day to minute 表示: 4天5小时12分
interval '400 5' day(3) to hour 表示: 400天5小时, 400为3为精度,所以"day(3)", 注意默认值为2.
interval '400' day(3) 表示: 400天
interval '11:12:10.2222222' hour to second(7) 表示: 11小时12分10.2222222秒
interval '11:20' hour to minute 表示: 11小时20分
interval '10' hour 表示: 10小时
interval '10:22' minute to second 表示: 10分22秒
interval '10' minute 表示: 10分
interval '4' day 表示: 4天
interval '25' hour 表示: 25小时
interval '40' minute 表示: 40分
interval '120' hour(3) 表示: 120小时
interval '30.12345' second(2,4) 表示: 30.1235秒, 因为该地方秒的后面精度设置为4, 要进行四舍五入.
interval '20' day - interval '240' hour = interval '10-0' day to second 表示: 20天 - 240小时 = 10天0秒
相关阅读
**一、效率高的写法 **1.无ORDER BY排序的写法。(效率最高)(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几
一、概念和作用 在oracle索引是一种供服务器在表中快速查找一个行的数据库结构。合理使用索引能够大大提高数据库的运行效率
F.1字符函数——返回字符值(chr,concat,initcap,lower,lpad/rpad,nls_initcap,nls_lower,nls_upper,regexp_replace,regexp_subst
oracle序列参数:nextval和currval序列的两参数:nextval和currval。Nextval returns the next avaiable sequence value.It retu
一般使用oracle数据库时,用HR和SCOTT用户登录居多。在数据库中同样可以自己创建用户,然后分配相应的权限 例如我们要创建一个用户名