类型:数据库类大小:4210万语言:中文评分:4.2标签:立即下载做一个自动任务,需要查询指定期限内数据,比如按照自然月,按照自然日,按照自然周,需要支持神谕和数据库数据库。数据库中表字段接收时间,由C负责写入,内容为时间_t的32位值,也就是1970年到现在的秒数。
研究了一天,得出如下语句:
对于SqlServer,
查询前一天的数据,
从表名中选择*其中datediff (day,dateadd(day,(ReceiveTime 8*3600)/60/60/24 - 1,' 19700101 '),get date())=2;请关注其中的8*3600,这是因为,SqlServer中,按照协调世界时。亦称协道界时计算标准时间,(接收时间)/60/60/24计算的标准时间,但是数据库服务器时区是东八区,故需要加上这个值。
以下同理,不解释。
查询前一周的数据,
查询前一周选择* FROM表名,其中datediff(day,datediff(day,(ReceiveTime 8 * 3600)/60/60/24,' 1970-01-01 003360000 '),getdate ())=DatePart (Weekday,getdate())1和datediff(day,datediff(day,(receive time 8 * 3600)/60/24,' 1970-01-01 000:0033)
查询前一月的数据,
查询前一月选择* FROM表名,其中datediff(月,dateadd(日),(ReceiveTime 8 * 3600)/60/60/24,' 1970-01-01 00:00:00 '),get date())=1;
对于神谕数据库
查询前一天:
查询前一天选择计数(*)FROM表名,其中接收时间=((TRUNC(SYSDATE-1,' dd') - TO_DATE ('19700101 ',' yyymmdd ')* 24 * 3600-8 * 3600)和receivetime ((TRUNC (SYSDATE,' dd') - TO_DATE ('19700101 ',' yymmdd ')* 24 * 3600-8 * 3600);
查询前一周:
查询前一周从接收时间所在的表名中选择计数(*)(TRUNC(SYSDATE-TO _ NUMBER(TO _ CHAR(SYSDATE,' W ')),' dd')- TO_DATE ('19700101 ',' yyymmdd'))* 24* 3600 - 8 * 3600)和接收时间=((TRUNC(SYSDATE-TO _ NUMBER(TO _ CHAR(SYSDATE,' W')) - 7,' dd')- TO_DATE ('19700101 ',' yymmdd'))* 24*查询前一月:
查询前一月选择计数(*)FROM表名,其中接收时间=((trunc(last _ day(add _ months DATE,-2)),' dd') 1) - TO_DATE ('19700101 ',' yymmdd ')* 24 * 3600-8 * 3600)和接收时间(((trunc(last _ day(add _ months DATE,-1)),' dd') 1) - TO_DATE ('19700101 ',' yymmdd ')* 24 * 3600)