• <td id="ae6ms"><li id="ae6ms"></li></td>
  • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
  • <table id="ae6ms"></table>
  • <td id="ae6ms"></td>
    <td id="ae6ms"></td>
  • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
  • <td id="ae6ms"></td>
  • <table id="ae6ms"><li id="ae6ms"></li></table>
  • <table id="ae6ms"></table>
    西西軟件園多重安全檢測下載網站、值得信賴的軟件下載站!
    軟件
    軟件
    文章
    搜索

    首頁西西教程數據庫教程 → SqlServer Oracle 時間函數 同C++ time_t 的轉換

    SqlServer Oracle 時間函數 同C++ time_t 的轉換

    相關軟件相關文章發表評論 來源:aqhistory時間:2010/3/9 19:46:30字體大?。?em class="fontsize">A-A+

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

    • 類型:數據庫類大?。?i>42.1M語言:中文 評分:4.2
    • 標簽:
    立即下載

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

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

     

    對于SqlServer,

    查詢前一天的數據,

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

    以下同理,不解釋。

    查詢前一周的數據,

     

    查詢前一周
    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;

     

    查詢前一月的數據,

     

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

     

     

    對于Oracle數據庫


    查詢前一天:

     

    查詢前一天
    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);

      相關評論

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

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

      熱門評論

      最新評論

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

      昵稱:
      表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
      字數: 0/500 (您的評論需要經過審核才能顯示)
      女人让男人桶30分钟免费视频,女人张开腿让男人桶个爽,一进一出又大又粗爽视频
    • <td id="ae6ms"><li id="ae6ms"></li></td>
    • <xmp id="ae6ms"><td id="ae6ms"></td><table id="ae6ms"></table>
    • <table id="ae6ms"></table>
    • <td id="ae6ms"></td>
      <td id="ae6ms"></td>
    • <table id="ae6ms"></table><table id="ae6ms"><td id="ae6ms"></td></table>
    • <td id="ae6ms"></td>
    • <table id="ae6ms"><li id="ae6ms"></li></table>
    • <table id="ae6ms"></table>