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

Between Date

尚未結案
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-04 15:44:25 IP:203.185.xxx.xxx 未訂閱
我有兩個時間,一個開始時間,一個結束時間,請問SQL 如何寫到一個check下時間range有冇reduance,即係話,可能某件貨品在某一段時間(由開始時間到結束時間)是某一個價錢,但當某一段時間就第二個,所以當第二個價錢輸入時,要輸入時間,所以想請下那段時間會否與其它時間有衝突,不然便會有兩個價錢出現...請問應該如何實作呢?
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-05 01:45:39 IP:203.204.xxx.xxx 未訂閱
BorlandUser 你好
我的作法,提供給你參考
1.資料結構
  ItemNo    QuDate     QuCost
  貨品編號  報價日期   報價金額
  ========  ========   ========
  A001      1998/10/01     1382
  A001      2000/01/01     1500
  A001      2002/06/01     1640
  A002      1998/10/01     500
  .......
2.當要查A001於2001/03/17時的單價,則只要
  Select QuCost From TableName 
  Where ItemNo='A001' And QuDate <={2001/03/17} Order by QuDate DESC  
  // 日期的表示方式好像是{} 吧,一般我都用Paramater代進去
此時查詢到的第一筆單價即是你要的單價(1500),用這種方式不必用到Between,
快速又方便,若使用頻率很高(如在迴圈中使用)還可取到ClientDataSet中使用
AddIndex設定索引(用AddIndex才可以作降冪排序)然後使用FindNeast馬上就可
以找到。
BorlandUser
中階會員


發表:148
回覆:217
積分:73
註冊:2004-02-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-05 02:00:10 IP:203.218.xxx.xxx 未訂閱
如果db的design是這樣呢? Item Start Date End Date Cost ----------------------------------------------------- 1 5/4/2001 10/5/2001 120 1 11/5/2001 12/5/2002 150 咁我個program要入一個start的date同end的date,但如果start的date同end的date衝撞咁會點呢?
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-05 02:17:20 IP:203.204.xxx.xxx 未訂閱
引言: 如果db的design是這樣呢? Item Start Date End Date Cost ----------------------------------------------------- 1 5/4/2001 10/5/2001 120 1 11/5/2001 12/5/2002 150 咁我個program要入一個start的date同end的date,但如果start的date同end的date衝撞咁會點呢?
BorlandUser 你好 當然囉!資料結構會長的怎麼樣,這還看需求在那裏,或許你有特殊的需求,才會有如此的資料結構。 以結構面來看,你的程式必須維護好日期區間不能有重疊或有間隔,查詢單價時才不會有如你說的查到兩筆資料或找不到符合日期之單價,另外有一個問題:譬如從2004/01/01以後是多少錢,但到什麼時候截止呢?目前不知道,那麼日期間如何表現? 提供給你的方法正好可以解決這些問題,如例 ----1998/1001----2000/01/01----2002/06/01------------- 1382-------->1500--------->1640---------------> -----> 代表單價延續的區間 如何? 剛好沒間隔也沒重疊,且2002/06/01之後都是1640除非有新的報價記錄進來。
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-05 09:09:58 IP:210.65.xxx.xxx 未訂閱
Hi BorlandUser,    插一下花
引言: 如果db的design是這樣呢? Item Start Date End Date Cost ----------------------------------------------------- 1 5/4/2001 10/5/2001 120 1 11/5/2001 12/5/2002 150 咁我個program要入一個start的date同end的date,但如果start的date同end的date衝撞咁會點呢?
1.你如果執意以此架構進行設計,可以使用已下語法來進行判斷你所輸入的資料,Start_Date 與 End_Date 是否有與現行資料重疊狀況 select * from TableName where item = :p_item and :p_start_date between start_date and end_date select * from TableName where item = :p_item and :p_end_date between start_date and end_date 2.Start_Date 與 End_Date 可以不輸入,代表沒有限制,但 Start_Date 與 End_Date 不可同時為空 3.其實 Chance36 版大已提供很好的 Solution,建議你可以參考看看 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
系統時間:2024-10-03 1:18:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!