如何查找設定月份之間的紀錄? |
答題得分者是:sos_admin
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
各位先進好!
我想查找設定月份之間的記錄,例如:2000.3─2003.5
用如下方式:
ADOquery1....;
Adoquery1.sql.add('select dateField ,count(dateField) AS RecordNum from table1 where dateField between :datetime1 and :datetime2 Group By dateField'); Adoquery1.Parameters.ParamByName('DateTime1').value:=FormatDateTime('YYYY-M',DateTimePicker1.date); Adoquery1.Parameters.ParamByName('DateTime2').value:=FormatDateTime('YYYY-M',DateTimePicker2.date); ....
但實際用這種方法查找的結果是天之間的記錄,例如:2000.3.1─2003.5.20的每天記錄數
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
procedure TForm1.BitBtn1Click(Sender: TObject);
var
y,m,d:word;
begin
adoquery1.SQL.clear;
adoquery1.SQL.Text :='select * from ab where (year(ee)*12+month(ee)) between :ee1 and :ee2';
DecodeDate(DateTimePicker1.Date,y,m,d);
adoquery1.Parameters.ParamByName('ee1').Value :=y*12+m;
DecodeDate(DateTimePicker1.Date,y,m,d);
adoquery1.Parameters.ParamByName('ee2').Value :=y*12+m;
adoquery1.Open ;
end; 这个是我写的测试程序,其中ee为日期型的字段 思想就是将 年*12+月 得出的数字比较就可以了 我上面的程式已经测试通过的
|
uuujjj
一般會員 發表:31 回覆:59 積分:18 註冊:2002-09-28 發送簡訊給我 |
各位前輩大家好~
我跟發表此疑問主題的mathewzha版友有相同的疑問,
也是要找設定月份的記錄(不過,不是之間)^^"
我的資料庫:Access XP 我的資料表如下:
tabel => A na| date | money |
==|==========|=======|
A |2003/2/1 | 100 |
B |2003/2/8 | 200 |
C |2003/3/4 | 500 |
D |2003/2/27 | 300 |
E |2003/5/1 | 600 | 我的表單上有:
1,一個ComboBox的元件,是用來選擇本年的月份,其name => cmbMonth
2,一個「查詢」的button按鈕
3,DBGrid、ADOQuery …相關資料連結元件 ==================================================
問題是這樣的:
我想讓使用者先於cmbMonth上點選月份(假設我點選2,也就是2月份),
接著再點按「查詢」的按鈕,則資料會顯示出本年二月份的所有資料,
如
na| date | money |
==|==========|=======|
A |2003/2/1 | 100 |
B |2003/2/8 | 200 |
D |2003/2/27 | 300 | 據我所知OracleSQL中有一個日期格式為:to_date('2003XXYY','yyyymmdd')
可以這樣去篩選日期的資料,
如我可以下:
select * from A
where date = to_date('200302','yyyymm') 而程式可以這樣寫:
sql:='select * from A where date = to_date(''' IntToStr(CurrentYear) cmbMonth.text ''',''yyyymm'')';
with adqCas01 do
begin
Close;
Sql.Clear ;
Sql.Add(sql);
Open;
end; 但,就是不知道AccessSql該如何應用~(^︵^"")
我已經找了好多篇文章…還有翻了我自己所有的書籍…
可能自己還是太嫰了…仍找不到我想要的解答…
希望前輩們幫mathewzhao版友解答的同時,也能順便解答我的疑惑~
謝謝~太麻煩前輩們了…m(_ _)m
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
晚輩希望查找設定月份之間的記錄,然後準備按時間(月份)先後group by 月份, 然後在DBgrid顯示.前輩的方法可以查找設定月份之間的記錄,但是如何可以在DBgrid 中顯示每月的記錄數呢?
------------------
不懂您说的什么意思,查询后有纪录怎么不好在DBgrid 中顯示呀? 如果需要按月份分组查询,就用类似于下面的用法。
SELECT COUNT(*) AS MYCOUNT,(year(DD)*12 month(DD)) AS CCC
FROM AB GROUP BY (year(DD)*12 month(DD));
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
前輩SOS_admin 好!
抱歉!語義表達不清請見諒.
希望做的步驟如下: 1)查找到時間段內各月份的記錄
2)然後按月份排序,並顯示各月份記錄數
我想SQL應該這樣下,但有錯誤(資料庫:Access 2000):
錯誤訊息是:試圖執行的查詢不包括特定表達式'dateField'‧
ADOquery1.Close; ADOquery1.SQL.clear; Adoquery1.sql.add('select dateField ,count(dateField) AS RecordNum from table1 where year(dateField)*12 month(dateField) between :datetime1 and :datetime2 Group By year(dateField)*12 month(dateField)'); DecodeDate(DateTimePicker4.Date,y,m,d); adoquery1.Parameters.ParamByName('DateTime1').Value :=y*12 m; DecodeDate(DateTimePicker5.Date,y,m,d); adoquery1.Parameters.ParamByName('DateTime2').Value :=y*12 m; adoquery1.Open ; |
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
select dateField ,count(dateField) AS RecordNum from table1 where year(dateField)*12+month(dateField) between :datetime1 and :datetime2 Group By year(dateField)*12+month(dateField),dateField 或 select count(dateField) AS RecordNum from table1 where year(dateField)*12 month(dateField) between :datetime1 and :datetime2 Group By year(dateField)*12 month(dateField) group by 只有这样使用才不会错的
|
kets
一般會員 發表:9 回覆:21 積分:6 註冊:2003-04-26 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |