各位老铁们,大家好,今天由我来为大家分享sql 计算时间差,以及sql查询两个日期之间的数据的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们更大的动力,谢谢大家了哈,下面我们开始吧!
本文目录
- ORACEL sql语句 两时间字段求差
- Oracle的cost值越大,是不是这SQL的执行计划就越差
- 用SQL语句判断两个时间 差>24小时
- 请问mysql的sql中如何计算两个datetime的差,精确到小时,谢谢
一、ORACEL sql语句 两时间字段求差
两个Date类型字段:START_DATE,END_DATE,计算这两个日期的时间差(分别以天,小时,分钟,秒,毫秒):
ROUND(TO_NUMBER(END_DATE- START_DATE))
ROUND(TO_NUMBER(END_DATE- START_DATE)* 24)
ROUND(TO_NUMBER(END_DATE- START_DATE)* 24* 60)
ROUND(TO_NUMBER(END_DATE- START_DATE)* 24* 60* 60)
ROUND(TO_NUMBER(END_DATE- START_DATE)* 24* 60* 60* 1000)
Oracle计算时间差函数 2008-08-20 10:00两个Date类型字段:START_DATE,END_DATE,计算这两个日期的时间差(分别以天,小时,分钟,秒,毫秒):天: ROUND(TO_NUMBER(END_DATE- START_DATE))小时: ROUND(TO_NUMBER(END_DATE- START_DATE)* 24)分钟: ROUND(TO_NUMBER(END_DATE- START_DATE)* 24* 60)秒: ROUND(TO_NUMBER(END_DATE- START_DATE)* 24* 60* 60)毫秒: ROUND(TO_NUMBER(END_DATE- START_DATE)* 24* 60* 60* 1000)
select to_date('2007-06-28 19:51:20','yyyy-MM-dd HH24:mi:ss') from dual;
select to_date('2007-06-28 19:51:20','yyyy-MM-dd HH:mm:ss') from dual;
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;
select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;
DAY天的名字,使用空格填充到 9个字符
YYY,YY,Y年份的最后三位,两位,一位
WW年中的第几个星期 1.日期时间间隔 *** 作
select sysdate,sysdate- interval'7' MINUTE from dual
select sysdate- interval'7' ho *** from dual
select sysdate- interval'7' day from dual
select sysdate,sysdate- interval'7' month from dual
select sysdate,sysdate- interval'7' year from dual
select sysdate,sysdate- 8*interval'2' ho *** from dual
select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual
select sysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual
select sysdate,to_char(sysdate,'yyyy-ddd hh:mi:ss') from dual
select sysdate,to_char(sysdate,'yyyy-mm iw-d hh:mi:ss') from dual
参考 oracle的相关关文档(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)
select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual
具体用法和上面的 to_char差不多。
使用TO_NUMBER函数将字符转换为数字
TO_NUMBER(char[,'格式'])
DAY天的名字,使用空格填充到9个字符
YYY,YY,Y年份的最后三位,两位,一位
WW年中的第几个星期 1.日期时间间隔 *** 作
select sysdate,sysdate- interval’7’ MINUTE from dual
select sysdate- interval’7’ ho *** from dual
select sysdate- interval’7’ day from dual
select sysdate,sysdate- interval’7’ month from dual
select sysdate,sysdate- interval’7’ year from dual
select sysdate,sysdate- 8*interval’2’ ho *** from dual
select sysdate,to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual
select sysdate,to_char(sysdate,’yyyy-mm-dd hh:mi:ss’) from dual
select sysdate,to_char(sysdate,’yyyy-ddd hh:mi:ss’) from dual
select sysdate,to_char(sysdate,’yyyy-mm iw-d hh:mi:ss’) from dual
参考oracle的相关关文档(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)
select to_date(’2003-10-17 21:15:37’,’yyyy-mm-dd hh24:mi:ss’) from dual
具体用法和上面的to_char差不多。
select trunc(sysdate,’YEAR’) from dual
select trunc(sysdate) from dual
select to_char(trunc(sysdate,’YYYY’),’YYYY’) from dual
--返回当前时间年月日小时分秒毫秒
select to_char(c *** rent_timestamp(5),’DD-MON-YYYY HH24:MI:SSxFF’) from dual;
--返回当前时间的秒毫秒,可以指定秒后面的精度(更大=9)
select to_char(c *** rent_timestamp(9),’MI:SSxFF’) from dual;
l_dummy all_objects.object_name%type;
l_start number default dbms_utility.get_time;
open l_rc for'select object_name from all_objects'||'where object_id='|| i;
dbms_output.put_line( round((dbms_utility.get_time-l_start)/100, 2)||' seconds...');
二、Oracle的cost值越大,是不是这SQL的执行计划就越差
1、理论上是 cost值越大,SQL的执行计划就不好.
2、但是还有一个前提,就是你的表的分析数据要正确。
3、cost值的计算,是根据数据库表的统计信息来计算的。
4、例如你有一个一百万行的表 ABC。在 A列上面有一个索引。
5、SELECT SUM(B) FROM ABC WHERE A= 100
6、在数据库没有表/索引的相关统计信息的情况下,这个 cost确实是估计出来的一个大概的值。偏差可能与这个表中的 A=100的数量有多少相关。
7、比如 100万条记录里面, A=100的数据只有一条/ A=100的数据只有十万条。执行的时间可是差很多的。
8、但是如果表/索引没有被分析过,数据库对于
9、SELECT SUM(B) FROM ABC WHERE A= 100
10、SELECT SUM(B) FROM ABC WHERE A= 1000
11、但是如果你的表/索引,是已经分析过了的,那么 cost所反映出来的值,可能更精确一些。
12、因为在分析的时候,就能知道 A=100的数据只有一条还是有十万条。
13、数据库可以根据需要,选择更佳的查询方案来进行处理。
14、假如那一百万条数据中, A=100的数据只有一条,而 A=1000的数据,有八十万条。
15、SELECT SUM(B) FROM ABC WHERE A= 100
16、SELECT SUM(B) FROM ABC WHERE A= 1000
三、用SQL语句判断两个时间 差>24小时
1、mssql的datadiff对时间的计算很不严谨啊,
2、select DATEDIFF(ho *** ,'20110101 00:22:00','20110102 00:00:00')你看看,这样也是24小时,
3、但其实是23小时多差22分钟,也就是说,这个计算的过程是忽略分和秒的影响的,看你的程序的要求了,如果只看小时,就可以,如果要考虑分钟或秒,直接是不行的
4、精确的比较要分两个部分,就是年月日一个部分,时间一个部分
5、年月日分别看年是否相同,月是否相同,这两个如果不同则肯定>24小时,在看日是否相同,如果日相同肯定<=24小时,如果日不同,select DATEDIFF(dd,'20110101 00:22:00','20110102 00:00:00')是否>=2,如果满足也肯定>24小时,如果=1就比较麻烦,还要在判断时分秒,
6、因为 select DATEDIFF(hh,'2011/01/01 00:22:00','2011/01/02 00:55:00')=24
7、 select DATEDIFF(hh,'2011/01/01 00:22:00','2011/01/02 00:00:00')=24
四、请问mysql的sql中如何计算两个datetime的差,精确到小时,谢谢
TIMES *** PDIFF(interval,datetime_expr1,datetime_expr2)
返回日期或日期时间表达式datetime_expr1和datetime_expr2the之间的整数差。
其结果的单位由interval参数给出。该参数必须是以下值的其中一个:
SELECT'年'AS`日期部分`,TIMES *** PDIFF(YEAR,'2012-12-21',CURRENT_TIMES *** P())AS`数值`
SELECT'季度'AS`日期部分`,TIMES *** PDIFF(QUARTER,'2012-12-21',CURRENT_TIMES *** P())AS`数值`
SELECT'月'AS`日期部分`,TIMES *** PDIFF(MONTH,'2012-12-21',CURRENT_TIMES *** P())AS`数值`
SELECT'日'AS`日期部分`,TIMES *** PDIFF(DAY,'2012-12-21',CURRENT_TIMES *** P())AS`数值`
SELECT'周'AS`日期部分`,TIMES *** PDIFF(WEEK,'2012-12-21',CURRENT_TIMES *** P())AS`数值`
SELECT'时'AS`日期部分`,TIMES *** PDIFF(HOUR,'2012-12-21',CURRENT_TIMES *** P())AS`数值`
SELECT'分'AS`日期部分`,TIMES *** PDIFF(MINUTE,'2012-12-21',CURRENT_TIMES *** P())AS`数值`
SELECT'秒'AS`日期部分`,TIMES *** PDIFF(SECOND,'2012-12-21',CURRENT_TIMES *** P())AS`数值`
mysql>selectCURRENT_TIMES *** P();
关于sql 计算时间差和sql查询两个日期之间的数据的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。