大家好,感谢邀请,今天来为大家分享一下sql时间差的问题,以及和sql如何计算日期的差值的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
本文目录
一、sql~日期格式如何相减
问题一:SELECT DATEDIFF( Day,'2008.08.25','2008.09.01')
问题二:SELECT DATEDIFF( Second, 2009-8-25 12:15:12', 2009-9-1 7:18:20')--返回相差秒数
SELECT DATEDIFF( Minute, 2009-8-25 12:15:12', 2009-9-1 7:18:20')--返回相差分钟数
SELECT DATEDIFF( Hour, 2009-8-25 12:15:12', 2009-9-1 7:18:20')--返回相差小时数
问题三:SELECT DATEDIFF( Day, 2009-8-25 12:15:12', 2009-9-1 7:18:20')
返回跨两个指定日期的日期和时间边界数。
DATEDIFF( datepart, startdate, enddate)
是规定了应在日期的哪一部分计算差额的参数。下表列出了 Microsoft® SQL Server™识别的日期部分和缩写。
是计算的开始日期。startdate是返回 datetime或 *** alldatetime值或日期格式字符串的表达式。
因为 *** alldatetime只精确到分钟,所以当用 *** alldatetime值时,秒和毫秒总是 0。
如果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff为 2049(默认),则 49被解释为 2049,2050被解释为 1950。为避免模糊,请使用四位数的年份。
有关时间值指定的更多信息,请参见时间格式。有关日期指定的更多信息,请参见 datetime和 *** alldatetime。
是计算的终止日期。enddate是返回 datetime或 *** alldatetime值或日期格式字符串的表达式。
startdate是从 enddate减去。如果 startdate比 enddate晚,返回负值。
当结果超出整数值范围,DATEDIFF产生错误。对于毫秒,更大数是 24天 20小时 31分钟零 23.647秒。对于秒,更大数是 68年。
计算跨分钟、秒和毫秒这些边界的 *** ,使得 DATEDIFF给出的结果在全部数据类型中是一致的。结果是带正负号的整数值,其等于跨之一个和第二个日期间的 datepart边界数。例如,在 1月 4日(星期日)和 1月 11日(星期日)之间的星期数是 1。
此示例确定在 pubs数据库中标题发布日期和当前日期间的天数。
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
二、用SQL语句判断两个时间 差>24小时
1、mssql的datadiff对时间的计算很不严谨啊,
2、select DATEDIFF(hour,'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
三、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' hour 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' hour 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’ hour 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’ hour 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(current_timestamp(5),’DD-MON-YYYY HH24:MI:SSxFF’) from dual;
--返回当前时间的秒毫秒,可以指定秒后面的精度(更大=9)
select to_char(current_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...');
关于sql时间差和sql如何计算日期的差值的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。