【AccessSQL】關於select指定月份的語法請教 |
答題得分者是:sos_admin
|
uuujjj
一般會員 發表:31 回覆:59 積分:18 註冊:2002-09-28 發送簡訊給我 |
各位前輩大家好~
我的問題是要找設定月份的資料記錄
我的資料庫: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該如何應用~(^︵^"")
我已經找了好多篇文章…還有翻了我自己所有的書籍…
可能自己還是太嫰了…仍找不到我想要的解答…
希望前輩們能不厭其煩地為我解惑~
謝謝~太麻煩前輩們了…
|
Winifred
初階會員 發表:3 回覆:34 積分:47 註冊:2002-07-24 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
你好:
下列方式我用過,給你參考
< class="code">
function FirstDay (Date : TDateTime) : TDateTime;
var
Y, M, D : Word;
begin
DecodeDate (Date, Y, M, D);
Result := EncodeDate (Y, M, 1);
end; function LastDay (Date : TDateTime) : TDateTime;
var
Y, M, D : Word;
begin
DecodeDate (FirstDay (Date), Y, M, D);
Result := EncodeDate (Y, M, 1);
result := result - EncodeTime (0, 0, 0, 1);
end; SQL := format ('Select * From DateTerm Where CheckDate between #%s# and #%s#', [DateToStr (FirstDay (SelDate)), DateTimeToStr (LastDay (SelDate))])
|
uuujjj
一般會員 發表:31 回覆:59 積分:18 註冊:2002-09-28 發送簡訊給我 |
引言: 在〔如何查找設定月份之間的紀錄? 〕中已经帮您解答了 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=36350 to uuujjj : 同上,思想就是将 年*12+月 得出的数字比较就可以了 'select * from A where (year(date)*12 month(date))=' inttostr(CurrentYear*12 strtoint(cmbMonth.text)) '' 發表人 - sos_admin 於 2003/08/26 18:16:49感謝sos_admin版友您的指導\(^0^)/ 真的成功了~而且,語法簡易~真的非常的感謝~又學到一招了~(^__^) 真Happy呀~ 不過,我可以請教一下您一個疑問嗎? 我發現有關「年份」的函式都乘以12了, 'select * from A where (year(date)*12 month(date))=' IntToStr(CurrentYear*12 StrToInt(cmbMonth.text)) '' 紅色字部份為何都要乘12呢?? 因為取年的數值出來了卻又*12 ??? (感覺就好像是2003*12 =24036 < >) 這代表何種含意呢???? 不好意思,又麻煩您了~< > =============================================== 呃…對不起…(^^") 我剛回那主題去看了一遍,發現sos_admin版友已經有提出why了…^^" 原來是讓它的值來做比較呀… 真的太神了…也可以用這種方法來select 不過,我發現不用乘12也行得通呢~^^ 'select * from A where (year(date) month(date))=' IntToStr(CurrentYear StrToInt(cmbMonth.text)) 呵呵呵~原來如此~稍微瞭解了… 發表人 - |
uuujjj
一般會員 發表:31 回覆:59 積分:18 註冊:2002-09-28 發送簡訊給我 |
引言: 你好: 下列方式我用過,給你參考 < class="code"> function FirstDay (Date : TDateTime) : TDateTime; var Y, M, D : Word; begin DecodeDate (Date, Y, M, D); Result := EncodeDate (Y, M, 1); end; function LastDay (Date : TDateTime) : TDateTime; var Y, M, D : Word; begin DecodeDate (FirstDay (Date), Y, M, D); Result := EncodeDate (Y, M, 1); result := result - EncodeTime (0, 0, 0, 1); end; SQL := format ('Select * From DateTerm Where CheckDate between #%s# and #%s#', [DateToStr (FirstDay (SelDate)), DateTimeToStr (LastDay (SelDate))])感謝ha0009的進階型函數應用的寫法~(^ ^") 這也讓我吸收到不少呢,謝謝您喔~ 我想這種運用函數的方法,以後一定會遇到!! 謝謝您提供經驗… |
uuujjj
一般會員 發表:31 回覆:59 積分:18 註冊:2002-09-28 發送簡訊給我 |
引言: 您好 我試了一個比較簡單的方法 不知道對您有沒有幫助 我把語法改成 'Select * from A where date like ' CHR(39) IntToStr(CurrentYear) '/' cmbMonth.text '%' CHR(39); 不知道這樣會不會是您要的 發表人 - winifred 於 2003/08/26 18:24:24感謝winifred版友的提供~(^^)/ 我試過了,不過,因為我的date是屬於日期格式… 而不是文字格式,大概是因為這樣, 所以like比較出來後有錯誤訊息出現…「少了運算元」 我會再try try看、修看看的,感謝您的指導~(^__^) |
uuujjj
一般會員 發表:31 回覆:59 積分:18 註冊:2002-09-28 發送簡訊給我 |
因為sos_admin前輩使用的是數值相加來做為比較,
對於月份期間(如3~5月份)的用法有很大的功效,
另外,我依sos_admin前輩的方式,做了個小幅度的變化,
想說,可以用數值來比較,如果換成字串的話,不知如何,
因此,就完成了下列這段語法: sql=
'select * from A where (Cstr(year(date)) Cstr(month(date)))=''' IntToStr(CurrentYear) cmbMonth.text '''' 謝謝各位的指導,以上是心得寫出來的,供大家參考^^
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
uuujjj
一般會員 發表:31 回覆:59 積分:18 註冊:2002-09-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |