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

如何查找設定月份之間的紀錄?

答題得分者是:sos_admin
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-26 15:19:49 IP:219.145.xxx.xxx 未訂閱
各位先進好! 我想查找設定月份之間的記錄,例如: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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-26 15:31:28 IP:147.8.xxx.xxx 未訂閱
Function DecodeDate and EncodeDate could be useful in this case.
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-26 15:46:46 IP:61.155.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-26 17:38:52 IP:203.70.xxx.xxx 未訂閱
各位前輩大家好~ 我跟發表此疑問主題的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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-26 18:10:48 IP:61.155.xxx.xxx 未訂閱
to uuujjj : 同上,思想就是将 年*12+月 得出的数字比较就可以了 'select * from A where (year(date)*12 month(date))=' inttostr(CurrentYear*12 strtoint(cmbMonth.text)) '' 發表人 - sos_admin 於 2003/08/26 18:13:45
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-28 17:47:09 IP:219.145.xxx.xxx 未訂閱
前輩sos_admin好! 晚輩希望查找設定月份之間的記錄,然後準備按時間(月份)先後group by 月份, 然後在DBgrid顯示.前輩的方法可以查找設定月份之間的記錄,但是如何可以在DBgrid 中顯示每月的記錄數呢?
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-28 18:10:31 IP:61.155.xxx.xxx 未訂閱
晚輩希望查找設定月份之間的記錄,然後準備按時間(月份)先後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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-28 18:22:35 IP:218.160.xxx.xxx 未訂閱
Hi mathewzhao : 不曉得你是用何種資料庫, 資料庫不同下法就不同 一般可先將年月轉成文字在Group by 例如 Access 

SELECT Str(Year(a)) Str(Month(a)), Count(*)
FROM T1
Group by Str(Year(a)) Str(Month(a))
a 是日期欄位 T1 是Table 其它資料庫做法大同小異 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-08-28 18:51:03 IP:219.145.xxx.xxx 未訂閱
前輩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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-08-28 19:11:00 IP:61.155.xxx.xxx 未訂閱
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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-08-03 01:46:39 IP:61.70.xxx.xxx 未訂閱
為何要年*12 月呢??
系統時間:2024-05-13 9:57:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!