oracle日期相减_oracle日期相减计算天数
SQL求两个时间点相减的函数,需求显示,时、分、秒
SQL> select sysdate d1,trunc(sysdate) d2 from dual;sql
oracle日期相减_oracle日期相减计算天数
oracle日期相减_oracle日期相减计算天数
server
datediff()
函数
sql
server
date
函数
定义和用法
datediff()
函数返回两个日期之间的天数。
语法
datediff(datepart,startdate,enddate)
startdate
和enddate
参数是合法的日期表达式。
datepart
datepart
缩写
年yy,
yyyy
季度
qq,
q月
mm,
m年中的日
dy,
y日
dd,
d周
wk,
ww
星期
dw,
w小时
hh
分钟
mi,
n秒
ss,
s毫秒
ms
mcs
纳秒
实例
例子
1使用如下
select
语句:
select
datediff(day,'2008-12-29','2008-12-30')
as
diffdate
结果:
diffdate
1例子
2使用如下
select
语句:
select
datediff(day,'2008-12-30','2008-12-29')
as
diffdate
结果:
diffdate
-1
两个日期之间的值
两日期相减,单位是“天”
SELECT
'YYYY-MM-DD')
-sysdate
AS
he_dates
FROM
dual;
SQL
DATEDIFF
函数进行处理
MySQL
TIMED但这种方法不能使用索引,IFF
函数进行处理
就是两个日期之间的值
两日期相减,单位是“天”
SELECT
'YYYY-MM-DD')
-sysdate
AS
he_dates
FROM
dual;
SQL
DATEDIFF
函数进行处理
MySQL
TIMEDIFF
函数进行处理
具体含义都是以教科书版本定义。
oracle如何查询两个日期相10分钟
oracle资料库中货是什么型别定你的表叫tab1, 日期列是date_co1.1、DATEl, 给定的日期就是当前系统时间,
select from (select t1.,rownum rn from (select t. from tab1 t where abs(t.date_col-sysdate)<10/24/60 order by abs(t.date_col-sysdate) t1)
where rn=1 ;
告诉你一个事实:
Oracle中,2日期相减得出的是2者相的天数
天数有小数点
一天有多少分钟自己知道算吧
问题不就OK了
oracle 跨年闰月的怎么算
d--天oracle 数据类型详解---日期型
oracle数据类型看起来非常简单,但用起来会发现有许多知识点,本文是我对ORACLE日期数据类型的一些整理,都是开发入门资料,与大家分享:
注:由于INTERVAL及TIME ZONE实际用得比较少,所以本文内容未涉及这两个方面。
1、常用日期型数据类型
这是ORACLE最常用的日期类型,它可以保存日期和时间,常用日期处理都可以采用这种类型。DATE表示的日期范围可以是公元前4712年1月1日至公元9999年12月31日date类型在数据库中的存储固定为7个字节,格式为:
第1字节:世纪+100
第2字节:年
第3字节:月
第5字节:小时+1
第6字节:分+1
第7字节:秒+1
1.2、TIMESP(p)
这也是ORACLE常用的日期类型,它与date的区别是不仅可以保存日期和时间,还能保存小数秒,小数位数可以指定为0-9,默认为6位,所以精度可以到ns(纳秒),数据库内部用7或者11个字节存储,如果精度为0,则用7字节存储,与date类型功能相同,如果精度大于0则用11字节存储。
格式为:
第1字节:世纪+100
第2字节:年
第3字节:月
第5字节:小时+1
第6字节:分+1
第7字节:秒+1
第8-11字节:纳秒,采用4个字节存储,内部运算类型为整形注:TIMESP日期类型如果与数值进行加减运算会自动转换为DATE型,也就是说小数秒会自动去除。
1.3、DATE与TIMESP类型内部存储验证
代码
1 create table T
3 C1 DATE,
4 private string DateDiff(DateTime DateTime1, DateTime DateTime2)C2 TIMESP(9)
67 insert into t(c1,c2) values(date'2010-2-12',timestamp'2010-2-12 13:24:52.234123211');8 insert into t(c1,c2) values(
9 to_date('2010-2-12 10:20:30','YYYY-MM-DD HH24:MI:SS'),10 to_timestamp('2010-2-12 13:24:52.123456','YYYY-MM-DD HH24:MI:SS.FF6')11 );
13 SQL> select c1,dump(c1) c1_d,c2,dump(c2) c2_d from t;代码
C1 C1_D C2 C2_D------------------------ ---------------------------------------- ---------------------------------------- -----------------------------------------------------2010-2-12 Typ=12 Len=7: 120,110,2,12,1,1,1 12-FEB-10 01.24.52.234123211 PM Typ=180 Len=11: 120,110,2,12,14,25,53,13,244,111,2032010-2-12 上午 10:20:30 Typ=12 Len=7: 120,110,2,12,11,21,31 12-FEB-10 01.24.52.123456000 PM Typ=180 Len=11: 120,110,2,12,14,25,53,7,,202,0以下是为了测试是为了验证TIMESP的小数位存储算法:
1 SQL> select c2,dump(c2,16) c2_d16 from t;C2 C2_D16---------------------------------------- --------------------------------------------------------------------------------12-FEB-10 01.24.52.234123211 PM Typ=180 Len=11: 78,6e,2,c,e,19,35,d,f4,6f,cb12-FEB-10 01.24.52.123456000 PM Typ=180 Len=11: 78,6e,2,c,e,19,35,7,5b,ca,0SQL> select to_number('0df46fcb','xxxxxxxx') mydata1,to_number('075bca00','xxxxxxxx') mydata2 from dual;MYDATA1 MYDATA2
---------- ----------
234123211 123456000
2、常见问题
2.1、如何取当前时间
sysdate--返回当前系统日期和时间,到秒systimestamp--返回当前系统日期和时间,到毫秒2.2、如何进行日期运算
日期型数据可以与数值加减得到新的日期,加减数值单位为天sysdate+1--取明天的当前时间
sysdate-1/24--取当前时间的前一个小时
SQL> select sysdate d1,sysdate+1 d2,sysdate-1/24 d3 from dual;D1 D2 D3------------------------ ------------------------ ------------------------2010-5-13 下午 10:55:16 2010-5-14 下午 10:55:16 2010-5-13 下午 09:55:162.3、如何求两个日期的间隔时间
可以直接把两个日期相减,返回的单位为天,小时及分秒会换算成小数SQL> select date'2012-01-01'-sysdate from dual;DATE'2012-01-01'-SYSDATE
------------------------
597.046030092593
2.4、如何将日期转字符
2.5、如何将字符转日期
to_date('2010-02-24 15:01:54','YYYY-MM-DD HH24:MI:SS')to_timestamp('1999-12-01 11:00:00.123456','YYYY-MM-DD HH:MI:SS.FF6')3、常用日期函数
3.1、TO_CHAR(DATE,FORMATSTR)--格式化日期成字符SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') d1 from dual;D1
------------------------
2010-05-13 22:56:38
TO_CHAR的其它用法示例
代码
1 SQL> SELECT TO_CHAR(date '2010-02-12', 'D') week_dayth,--周第几天(1-7),星期天=1,星期一=2,星期二=3,星期三=4,星期四=5,星期五=6,星期六=72 TO_CHAR(date '2010-02-12', 'DD') month_dayth,--月第几天3 TO_CHAR(date '2010-02-12', 'DDD') year_dayth,--年第几天4 TO_CHAR(date '2010-02-12', 'DAY') weekdayname,--英文星期名5 _CHAR(date '2010-02-12', 'w') month_weekth,--月第几周(0-4)6 TO_CHAR(date '2010-02-12', 'ww') year_weekth--年第几周(0-53)7 FROM DUAL;
代码
HH表示12小时进制,HH24表示采用24小时进制,MM表示月份,MI表示分钟。
3.3、TRUNC(DATE)--返回DATE的日期部分,时间为0点0分0秒SQL> select sysdate d1,trunc(sysdate) d2 from dual;D1 D2
------------------------ ------------------------2010-5-13 下午 10:59:18 2010-5-13
ADD_MONTHS是一个比较有意思的函数,它会自动处理大小月及闰月,如下所示1 SQL> select ADD_MONTHS(date '2010-2-12', 1),2 ADD_MONTHS(date '2010-2-27', 1),
4 ADD_MONTHS(date '2010-1-31', 1)
5 from dual
6 ;
ADD_MONTHS(DATE'2010-2-12',1) ADD_MONTHS(DATE'2010-2-27',1) ADD_MONTHS(DATE'2010-2-28',1) ADD_MONTHS(DATE'2010-1-31',1)----------------------------- ----------------------------- ----------------------------- -----------------------------2010-3-12 2010-3-27 2010-3-31 2010-2-283.6、LAST_DAY(DATE)--返回日期所在月份的一天日期SQL> select LAST_DAY(date '2010-2-12') from dual;LAST_DAY(DATE'2010-2-12')
-------------------------
2010-2-28
3.7、NEXT_DAY(DATE,CHAR) --从给定日期开始返回下个CHAR指定星期的日期SQL> SELECT NEXT_DAY(date'2010-2-21', 'MONDAY') NEXTDAY1,NEXT_DAY(date'2010-2-22', 'MONDAY') NEXTDAY2 FROM DUAL;NEXTDAY1 NEXTDAY2
2010-2-22 2010-3-1
TO_YMINTERVAL(CHAR)--返回[年-月]格式构成的时间间隔,一般用于日期加减运算3.8、TO_DSINTERVAL(CHAR)--返回[天 时:分:秒]格式构成的时间间隔,一般用于日期加减运算SQL> select date'2010-2-12'+TO_YMINTERVAL('01-02') newdate from dual;NEWDATE
------------------------------
1 SQL> select date '2010-2-12' + NUMTOYMINTERVAL(1, 'year') newdate1,2 date '2010-2-12' + NUMTOYMINTERVAL(1, 'month') newdate23 from dual;
NEWDATE1 NEWDATE2
2011-2-12 2010-3-12
1 SQL> select date '2010-2-12' + NUMTODSINTERVAL(1, 'DAY') newdate1,2 date '2010-2-12' + NUMTODSINTERVAL(1, 'HOUR') newdate23 from dual;
问下大家oracle中to_timestamp和to_date什么区别啊?
MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT可以按如下理解:
date类型是Oracle常用的日期型变量,时间间隔是参数可以是下列的值:秒。两个日期型相减得到是两个时间的间隔,注意单位是“天”。
举例如下:
to_date:
select to_date('2016-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')-sysdate from dual;结果:
to_timestamp:
select to_timestamp('2016-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')-systimestamp from dual;结果:
说明:
当使用date和timestamp类型的时候,选择是很清楚的。可以随意处置date和timestamp类型。当试图转换到更强大的timestamp的时候,需要注意,它们既有类似的地方,更有不同的地方,而足以造成破坏。两者在简洁和间隔尺寸方面各有优势,请合理地选择。
没有实质区别,to_timestamp 可以指定更加具体的时间例如 ‘ 2010-12-18 14:14:15.00005’
SQL 有什么函数让2个日期型的相减得到个number型的天数?
WEEK_DAYTH MONTH_DAYTH YEAR_DAYTH WEEKDAYNAME MONTH_WEEKTH YEAR_WEEKTH---------- ----------- ---------- ----------- ------------ -----------6 12 043 FRIDAY 2 073.2、TO_DATE(CHAR,FORMATSTR) --将字符转换成日期to_date('2010-02-24 15:01:54','YYYY-MM-DD HH24:MI:SS')格式备注:s--秒
DATEDIFF( ) 计算两个日期间的间隔。
sample:
SELECT fname, lname, hire_date
FROM employee
WHERE DATEDIFF(year, hire_date, getdate()) > 5
查找雇佣期限超过五年的所有员工。
DATEPART( ) 返回日期或日期时间列的指定部分,包括日、月或年。
sample:
SELECT DATEPART(year, hire_date)
FROM employee
只显示员工是在哪一年被雇佣的(而非完整日期)。
GETDATE( ) 或 DATE( ) 以日期时间的格式返回当前日期。对于许多其它日期函数,该函数作为输入函数很有用,如计算距当天之前或之后的时间间隔。
sample:
SELECT or2011-4-12der_id
FROM orders
WHERE order_date = GETDATE()
Displays orders placed today.
==========================================================
程序中的时间函数:
{string dateDiff = null;
TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
TimeSpan ts = ts1.Subtract(ts2).Duration();
dateDiff = ts.Days.ToString();
return dateDiff;
}
oracle 如何实现取两个日期之间的相的月份
months_between(结束时间,开始时间) 结果为月1、打开浏览器的Console工具栏,然后在里面输入一个待比较的日期字符串。
2、接下来通过new Date将字符串转化为日期对象。
3、然后调用new Date的getTime方法来获得当前的日期值。
4、当获得了两个日期值以后就直接将他们做即可该数字单位是天,要换算成其他单位,就简单了。
5、做完日期得到的是毫秒数,如果想用时分等单位的话在进行转化即可。
6、,如果经常需要进行日期比较的话,我们可以将其封装成一个函数,在参数里面传入日期值即可。
sql中该如何算成俩个时间之间的天数
3 ADD_MONTHS(date '2010-2-28', 1),ORACLE的写法timestamp是DATE类型的扩展,可以到小数秒(fractional_seconds_precision),可以是 0to9,缺省是6。两个timestamp相减的话,不能直接的得到天数,而是得到,多少天,多少小时,多少秒等。:
select trunc(date1-date2) 天数 from dual;
如果是oracle,直接用两个时间进行相减就可以得到了。例如:
select date1-date2 from dual
select datediff(day,日期1,日期2)
对于SQL ,可以如下:
select datediff(dd,日期1,日期2)
对于SQL ,可以如下:
select datediff(dd,日期1,日期2)
sql语句上下两行的日期相减
第4字节:天对于支持分析函数lag的数据库(Oracle 9i或之后, SQL 2012开始有支持lag, lead分析函数; PostgreSQL和MySQL不知道)来说, 可以直接使用lag函数.
lag分析函数的作用是: 取得按分组(分组可以不指定)与排序设定下, 前一条记录的字段值. 基本格式如下:
LAG(field_name) OVER([partition by ... , ]order by ...)其中, LAG, OVER为分析函数的关键字; field_name是要取上一条记录的字段名, partition by是指定按哪些字段进行分组, 如果不指定, 则所有的记录就是一个分组; order by是指定按何种顺序排列记录, 它与整个查询的order by可以相同或不同.
有了lag函数, 在查询中就可以获得上一条记录的某个字段值, 从而可以实现与本条记录的运算. 以3.7、NEXT_DAY(DATE,CHAR) --从给定日期开始返回下个CHAR指定星期的日期Oracle查询示例(使用Oracle自带的HR Schema):
SELECT FIRST_NAME, LAST_NAME, HIRE_DATE, LAG(HIRE_DATE) OVER(ORDER BY HIRE_DATE), HIRE_DATE - (LAG(HIRE_DATE) OVER(ORDER BY HIRE_DATE)) AS HIRE_DATE_DIFF
FROM HR.EMPLOYEES
ORDER BY HIRE_DATE;这里, lag中的排序和select的排序必须相同(因为要获取结果集中与上一个记录的日期值).
如果没有lag函数, 则要构造查询来实现.
ORACEL sql语句 两时间字段求
第6位元组:分+1oracle两个时间字段可以直接相减,直接相减的的结果单位为天
select datediff(s,voteTime,getdate()) fromvoter --设置数据库中voteTitle时间和当前getdate()时间的时间oracle中时间的计算单位为天,得到天数之后可以自己转换为其他单位
--获取两时间的相豪秒数
select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd hh24-mi-ss')) 24 60 60 1000) 相豪秒数 FROM DUAL;
直接想减就成。如:
select sysdate-to_date('2011-1-1','yyyy-mm-dd') from dual
得到:262.6469907407
直接相减,得到的数据是天数;
to_date('20110920121010','yyyymmddhh24miss')-todate('20110920121000','yyyymmddhh24miss')=10/(243600)天 ,,,,具体计算值会是小数
如果要得到其它单位的时间,需要做“天数->目标时间”的单位换算。
如要换算到秒:10/(243600)天 (243600)秒/天 == 10秒
1、可以使用EXTRACT( )函数,提取日期的不同部分,如day, hour 等
2、将各个部分相减后,使用||连接起来即可
sele from plsql where 日期1-日期2>1
mysql数据库的SQL语句和oracle的有什么区别?详细点
Oracle区别如下:
1.
Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。
2.
Oracle支持大并发,大访问量,是OLTP的工具。
3.
安装所用的空间别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。
4.Oracle也Mysql作上的一些区别
①主键
Mysql一般使用自动增长类型,在创建表时只要指定表的主键为auto
increment,插入记录时,不需要再指定该记录的主键值,Mysql将自动增长;Oracle没有自动增长类型,主键一般使用的序列,插入记录时将序列号的下一个值付给该字段即可;只是ORM框架是只要ns是native主键生成策略即可。
②单引号的处理
MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。
③翻页的SQL语句的处理
MYSQL处理翻页的SQL语句比较简单,用LIMIT
开始位置,
记录个数;ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,
并且只能用ROWNUM<100,
不能用ROWNUM>80
④长字符串的处理
长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时可作的字符串长度小于等于4000个单字节,
如果要插入更长的字符串,
请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出,返回上次作。
⑤空字符的处理
导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。
⑥字符串的模糊比较
MYSQL里用
字段名
like
'%字符串%',ORACLE里也可以用
字段名
like
'%字符串%'
速度不快。
首先,这三个数据库是不是同一个公司的产品;
二,使用其对应的对象是不一样的,oracle的主流大型数据库,大多数电信项目用于Oracle和sqlserver mysql数据库中使用的个人和小公司的,但对sqlserver费,mysql的没有;
三,功能,Oracle最强大的Oracle支持递归查询,他们不支持两个
,三个数据库,只有SQL 中有一个完整的图形用户接口,Oracle和MySQL必须通过其他第三方数据库的图形用户界面,如Oracle与大多都PLSQL;
5个纯手工望采纳!
7) mysql的group by 语句可以select 没有被分组的字段,如
有区别 你自己去百度吧,你这样问没有什么效果的。
SQL如何获取系统时间
TO_DATE('2012-12-21',getdate()
varchar2的长度是4000相关函数
SELECT GETDATE(),YEAR(GETDATE()),MONTH(GETDATE()),DAY(GETDATE()),DATEDIFF(YEAR,'2000-08-14',GETDATE()),
DATEPART(YEAR,GETDATE());
select case when getdate() end age from pats_in_hospital 没测试,用到一个partdate函数,截取日期年 getdate()函数;,如果是sqlserver,那么有year()函数取出年份,其余自己解决。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。