西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁西西教程數(shù)據(jù)庫教程 → SqlServer Oracle 時間函數(shù) 同C++ time_t 的轉(zhuǎn)換

SqlServer Oracle 時間函數(shù) 同C++ time_t 的轉(zhuǎn)換

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:aqhistory時間:2010/3/9 19:46:30字體大。A-A+

作者:佚名點擊:610次評論:5次標簽: Oracle

  • 類型:數(shù)據(jù)庫類大小:42.1M語言:中文 評分:4.2
  • 標簽:
立即下載

做一個自動任務,需要查詢指定期限內(nèi)數(shù)據(jù),比如按照自然月,按照自然日,按照自然周,需要支持Oracle 和 SqlServer數(shù)據(jù)庫。
數(shù)據(jù)庫中表字段receivetime,由C++負責寫入,內(nèi)容為time_t的32位值,也就是1970年到現(xiàn)在的秒數(shù)。

研究了一天,得出如下語句:

 

對于SqlServer,

查詢前一天的數(shù)據(jù),

select * from table_name where datediff ( day, dateadd(day, (ReceiveTime+8*3600)/60/60/24 - 1, '19700101'), getdate() ) = 2;
請關(guān)注其中的8*3600,這是因為,SqlServer中,按照UTC計算標準時間,(ReceiveTime)/60/60/24計算的標準時間,但是數(shù)據(jù)庫服務器時區(qū)是東八區(qū),故需要加上這個值。

以下同理,不解釋。

查詢前一周的數(shù)據(jù),

 

查詢前一周
SELECT *
FROM tablename
WHERE datediff
(day,
dateadd
(day,
(ReceiveTime + 8 * 3600) / 60 / 60 / 24,
'1970-01-01 00:00:00'),
getdate ()) >= DatePart (Weekday, getdate ()) + 1
and
datediff
(day,
dateadd
(day,
(ReceiveTime + 8 * 3600) / 60 / 60 / 24,
'1970-01-01 00:00:00'),
getdate ()) <= DatePart (Weekday, getdate ()) + 8;

 

查詢前一月的數(shù)據(jù),

 

查詢前一月
SELECT *
FROM tablename
WHERE datediff
(month,
dateadd
(day,
(ReceiveTime + 8 * 3600) / 60 / 60 / 24,
'1970-01-01 00:00:00'),
getdate ()) = 1;

 

 

對于Oracle數(shù)據(jù)庫


查詢前一天:

 

查詢前一天
SELECT count(*)
FROM tablename
WHERE receivetime >=
((TRUNC (SYSDATE - 1, 'dd') - TO_DATE ('19700101', 'yyyymmdd')
)
* 24
* 3600 - 8 * 3600)
AND receivetime <
( (TRUNC (SYSDATE, 'dd') - TO_DATE ('19700101', 'yyyymmdd')
) * 24 * 3600 - 8 * 3600);

 

查詢前一周:

查詢前一周
SELECT count(*)
FROM tablename
WHERE receivetime <
( ( TRUNC (SYSDATE - TO_NUMBER (TO_CHAR (SYSDATE, 'W')) , 'dd')
- TO_DATE ('19700101', 'yyyymmdd')
)
* 24
* 3600 - 8 * 3600 )
AND receivetime >=
(( TRUNC (SYSDATE - TO_NUMBER (TO_CHAR (SYSDATE, 'W')) - 7, 'dd')
- TO_DATE ('19700101', 'yyyymmdd')
)
* 24
* 3600 - 8 * 3600 );
查詢前一月:


查詢前一月
SELECT count(*)
FROM tablename
WHERE receivetime >=
( ((trunc(last_day( add_months(sysdate, -2 )),'dd') + 1) - TO_DATE ('19700101', 'yyyymmdd')) * 24 * 3600 - 8 * 3600 )
AND receivetime < (((trunc(last_day( add_months(sysdate, -1 )),'dd') + 1) - TO_DATE ('19700101', 'yyyymmdd')) * 24 * 3600 - 8 * 3600);

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(5)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)