sql server 算出当前时间的前多少分钟

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server 算出当前时间的前多少分钟相关的知识,希望对你有一定的参考价值。

比如当前时间是 2014-03-13 12:10:56.890 我想得到 2014-03-13 12:00:56.890 这个时间 也就是前十分钟。要怎么弄?我不是算两个时间的时间差。我想算出某个时间段内 有没有记录。所以 想到先查询出最后一条记录的是插入时间 再算出前多少分钟的时间。再用这个埋单段进行查询。如果有别的方法求赐教
也就是 查询出插入时间 datetime 类型的字段进行计算 怎么弄?

可用dateadd函数。

如查询当前时间10分钟前的时间,可用如下语句:

select dateadd(MINUTE,-10,GETDATE())

结果:

dateadd函数介绍:

表达式:DateAdd(timeinterval,number,date)

解释:

interval必要。字符串表达式,是所要加上去的时间间隔。

number必要。数值表达式,是要加上的时间间隔的数目。其数值可以为正数(得到未来的日期),也可以为负数(得到过去的日期)。

date必要。Variant (Date) 或表示日期的文字,这一日期还加上了时间间隔。

interval 参数具有以下设定值:

参考技术A SELECT DATEADD(MINUTE, -10, GETDATE())

取当前时间的前10分钟的时间本回答被提问者采纳
参考技术B 查个字符串转日期的方法,再加个查询条件在俩时间中间就可以了

sql server 以10分钟分组 统计人数

请问针对时间段从每天早上7点开始统计每十分钟人

解决思路:

我以前做过一个关于月份的,是说每3个月以分组,其实是一样的。不过可能啊,整体数据量大会有问题。如果你只是求一天的,那绝对没问题。
【1】如果只是当天,那么你以当天七点为准,算当天所有时间与它的分钟差,然后group by 分钟差/10 即可
【2】如果是全部数据的话,那么你在where里把时间段条件加上,然后找个最早的时间点为准 group by 当前时间与最早时间点的分钟差/10

这位朋友这样是死写,本文以当天为例啊

 

【1】构建个表测试一下

【2】利用分钟差/10分组

【3】显示不直观,转换成时间显示

SELECT DATEDIFF( Minute, \'2017-01-01 07:00:00\', \'2017-01-01 7:18:20\')

create table test104(
id  int identity(1,1),
[time] datetime 
)
insert into test104 values(\'20180301 07:05:05\')
insert into test104 values(\'20180301 07:06:05\')
insert into test104 values(\'20180301 07:15:05\')
insert into test104 values(\'20180301 07:16:05\')
insert into test104 values(\'20180301 07:25:05\')
insert into test104 values(\'20180301 07:26:05\')
insert into test104 values(\'20180301 07:35:05\')
insert into test104 values(\'20180301 07:36:05\')
insert into test104 values(\'20180301 07:45:05\')
insert into test104 values(\'20180301 07:46:05\')
insert into test104 values(\'20180301 07:55:05\')
insert into test104 values(\'20180301 07:56:05\')

select   dateadd(minute,DATEDIFF( Minute, \'20180301 07:00:00\', time)/10*10,\'20180301 07:00:00\' ),count(1) from test104
group by  DATEDIFF( Minute, \'20180301 07:00:00\', time)/10

 

方法2:利用分钟构造出想要的分钟列。

  比如  2018-03-01 07:56:05   ,构造出  2018-03-01 07:50:00

  核心思想

    (1)分钟数56拿出来,然后让其变成50

    (2)怎么变成50?--》56-56%10 = 50

    (3)怎么去掉后面的秒呢?用convert解决

select   dateadd(minute,datepart(minute,time)%10*(-1),time )  as example_col
, convert(char(16),   dateadd(minute,datepart(minute,time)%10*(-1),time)   ,120)+\':00\' as [group_time]
,*  from test104

 


 

  后面的分组就不用多说了,直接分就OK

select 
    group_time,
    count(1) as [时间段内记录数],
    max(time) as [时间段内最大时间],
    min(time) as [时间段内最小时间] 
from 
(
    select   dateadd(minute,datepart(minute,time)%10*(-1),time )  as example_col
    , convert(char(16),   dateadd(minute,datepart(minute,time)%10*(-1),time)   ,120)+\':00\' as [group_time]
    ,*  from test104
) t 
group by group_time

 


 

 上述2种办法适合于任意维度的时间操作

 

关于本文更好的办法,直接 --但仅限于这种10分钟的

group BY LEFT(startTime,15) 

以上是关于sql server 算出当前时间的前多少分钟的主要内容,如果未能解决你的问题,请参考以下文章

取当前时间的前五分钟时间

sql server存储过程中 判断时间字段是不是在当前时间前后5分钟以内 该怎么写

你好打搅,shell脚本,solaris系统。怎么获取当前时间的前10分钟?a=~date

sql中如何获取当天时间的零点

SQL 中怎么根据出生日期算出年龄 然后用年龄查询

PHP / MYSQL - 计算有多少连续的前一周结果与当前一周具有相同的价值(音乐图表)