全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2175
推到 Plurk!
推到 Facebook!

有關查詢日期的SQL語法...

尚未結案
minjiu
中階會員


發表:27
回覆:119
積分:69
註冊:2002-06-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-09 10:40:59 IP:218.164.xxx.xxx 未訂閱
請問各位先進,我有一個Paradox的DB file,此資料檔裡有一個欄位是文字型態(Alpha),此欄位存的是日期及時間的資料,請問我要如何下SQL指令來查詢某期間的記錄呢?煩請回答..謝謝!!    
DateTime              Value
==================== =======
05/17/01 13:57:42      aa
2000/06/14 12:07:14    bb
07/24/2001 11:27:24    cc
11/13/01 13:06:13      dd
03/25/03 12:22:25      ee
==================== =======
發表人 - minjiu 於 2004/02/09 10:52:38
Fishman
尊榮會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-09 11:35:39 IP:210.65.xxx.xxx 未訂閱
Hi:    首先你必須先將 DATETIME 內的資料格式固定(YYYY/MM/DD or YY/MM/DD or DD/MM/YYYY or DD/MM/YY),而且一定要是固定格式,再用以下 SQL Command
SELECT  *
FROM    TABLE
WHERE   文字轉日期(DATETIME) BETWEEN :P_DATE1 AND :P_DATE2    SELECT  *
FROM    TABLE
WHERE   DATETIME BETWEEN 日期轉文字(:P_DATE1) AND 日期轉文字(:P_DATE2   1)
當然,如果針對 DateTime 欄位可以設為 DateTime 格式,往後的程式寫作一定會比較輕鬆 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
minjiu
中階會員


發表:27
回覆:119
積分:69
註冊:2002-06-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-09 12:26:45 IP:218.164.xxx.xxx 未訂閱
因為那個資料檔是由別個程式產生的,而那個程式是別人撰寫的,我無Soruce Code,而DateTime那個欄位的格式不一定,所以想說看有沒有其他的辦法可以達到我的要求...
minjiu
中階會員


發表:27
回覆:119
積分:69
註冊:2002-06-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-09 12:27:47 IP:218.164.xxx.xxx 未訂閱
引言: 因為那個資料檔是由別個程式產生的,而那個程式是別人撰寫的,我無Source Code,而DateTime那個欄位的格式不一定,所以想說看有沒有其他的辦法可以達到我的要求...
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-09 12:44:27 IP:61.222.xxx.xxx 未訂閱
考慮看看在資料集的onfilterrecord事件處理 或是ttable的setrange
minjiu
中階會員


發表:27
回覆:119
積分:69
註冊:2002-06-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-09 13:13:15 IP:218.164.xxx.xxx 未訂閱
引言: 考慮看看在資料集的onfilterrecord事件處理 或是ttable的setrange
能說明做什麼動作嗎??
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-09 13:22:44 IP:61.222.xxx.xxx 未訂閱
    procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
  var v:tdate;
begin       v:=strtodate(dataset.Fields[i].AsString);
   //可能需要加工 例如 copy( str,1,count);       if v >= 你的起始日期範圍 then begin
      accpt:=true;
   end;
end;    
Fishman
尊榮會員


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-02-09 14:07:44 IP:210.65.xxx.xxx 未訂閱
Hi:    方法有二, 1.配合 hahalin 版主的方法並將 DateTime 加工,以下程式範例為增加一個 CalCulated Field(格式為 TDateTime) 並將其值算出
procedure TForm1.ClientDataSet1CalcFields(DataSet: TDataSet);
VAR
    V_DATE : String;
    V_Result : TDateTime;
    FormatSettings: TFormatSettings;
begin
    FormatSettings.ShortDateFormat := ShortDateFormat;
    V_DATE := Copy(DataSet.FieldByName('ST').AsString,1,POS(' ',DataSet.FieldByName('ST').AsString)-1);
    TRY
        ShortDateFormat := 'YYYY/MM/DD';
        V_Result := StrToDate(V_DATE);
    EXCEPT
        TRY
            ShortDateFormat := 'MM/DD/YYYY';
            V_Result := StrToDate(V_DATE);
        EXCEPT
            TRY
                ShortDateFormat := 'MM/DD/YY';
                V_Result := StrToDate(V_DATE);
            EXCEPT
                TRY
                    ShortDateFormat := 'YY/MM/DD';
                    V_Result := StrToDate(V_DATE);
                EXCEPT
                    V_Result := Now;
                END
            END;
        END;
    END;
    ShortDateFormat := FormatSettings.ShortDateFormat;
    DataSet.FieldByName('DT').AsDateTime := V_Result;
end;
2.若 DataBase 中,支援 StoredProcedure 或 Custom Function 功能,增加一個如上功能之 Function 於 Query 中使用
select  *
from    table
where   My_StrToDate(DateTime) between :p_date1 and :p_date2
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-02-09 14:14:38 IP:61.222.xxx.xxx 未訂閱
他已經說是用paradox了
系統時間:2024-11-23 7:26:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!