線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2837
推到 Plurk!
推到 Facebook!

SQL 問題請教(日期時間轉換成浮點數)?

答題得分者是:timhuang
cherry
一般會員


發表:16
回覆:26
積分:8
註冊:2002-06-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-26 19:41:50 IP:211.23.xxx.xxx 未訂閱
各位好:    最近碰到一個奇怪的問題,是有關時間的部份。 (資料庫是用sql 2000) 例如: 2003/7/30  轉換成浮點數是 37832       2003/08/01  轉換成浮點數是 37834 所以要查詢這段時間可以寫成 select  * from  Main  where  logtime > 37832.814013680  and logtime < 37834.084251447   可是卻沒有看到任何資料.... 我把時間減二 發現這個規則以套用在任何規則...滿奇怪的 >
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-26 21:27:31 IP:61.56.xxx.xxx 未訂閱
你好: 整數部分是日期,分數部分是時間。    
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-27 00:04:58 IP:61.62.xxx.xxx 未訂閱
hi, 在 mssql 中的 datetime 就是用 8個 bytes 的浮點數 來存放的, 所以是可以轉換的哦, 如 ha0009 兄的解釋, 該數整數的部分是日數. 基準點是 1900/1/1 00:00:00.000 為 0, 正代表往後, 負代表往前, 你可以在 sql query analyzer 中下:    select convert(datetime, 0) 就可以得到了.    當然反過來操作也可以    select convert(float, convert(datetime, '2003/7/30')) 會得到 37830 !    這樣明白了嗎?    節錄一段 help 中的敘述:    datetime 從 1753 年 1 月 1 日到 9999年 12 月 31 日的日期時間資料,精確度到 300 分之 1 秒,即 3.33 毫秒。值會捨入成 .000, .003,即 .007 毫秒的遞增量。 smalldatetime 日期及時間資料從西元 1900 年 1 月 1 日到西元 2079 年 6 月 6 日,精準度為分。29.998 秒或更小的 smalldatetime 值將捨棄尾數成為最接近的分;29.999 秒或更大的值將補足尾數成為最接近的分。
cherry
一般會員


發表:16
回覆:26
積分:8
註冊:2002-06-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-27 10:54:28 IP:211.23.xxx.xxx 未訂閱
謝謝你們的回答。 但我仍然對時間的轉換不瞭解! [系統環境 sql 2000 delphi 6] 舉個例子說明 [在delphi] 剛剛拉了DateTimePicker1 將時間設定為2003/07/30 var f : Double; begin f := DateTimePicker1.datetime; showmessage(floattostr(f)); //out put is 37832.431908 end; [在 sql] select convert(float, convert(datetime, '2003-07-30')) //out put is 37830 我的疑問是: 一樣的時間,轉換成浮點數卻不一樣? 時間的做法是可以用字串或浮點數來處理 目前的需求是用浮點數來處理 所以請各位幫忙 謝謝~
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-27 11:45:34 IP:203.95.xxx.xxx 未訂閱
hi, cherry, 在 delphi 中的 datetime 是使用 double 來記錄的, 同樣是使用整數位當作日, 但是基準點不同, 所以不能直接用來和 mssql 的 datetime 轉出的數值比較的哦~ 引述一段 delphi 的 help 中的資訊: The integral part of a Delphi TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of the TDateTime value is fraction of a 24 hour day that has elapsed. 他的基準點是 1899/12/30 所以和 mssql 的 1900/1/1 差 2 哦~~
cherry
一般會員


發表:16
回覆:26
積分:8
註冊:2002-06-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-27 12:03:04 IP:211.23.xxx.xxx 未訂閱
感謝timhuang... 原來是這樣 我瞭解了... 我整理如下, 希望可以供其它人參考 :) 如果以浮點數來處理時間 ================================================= delphi的基準點是 1899/12/30 mssql 的 基準點是 1900/1/1 Access的基準點是 1899/12/30 ================================================= 如果以字串來處理時間 必須注意各資料庫的用法 ================================================= Access 有專用的符號# select * from dz_main where logtime > #2003/07/30# ================================================= Cherry
系統時間:2024-03-29 21:16:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!