請教一個SQL語法問題 |
答題得分者是:ccchen
|
dicky
一般會員 發表:8 回覆:12 積分:4 註冊:2002-08-07 發送簡訊給我 |
query1.close;
query1.sql.clear;
query1.sql.Add('select CD_detail.cd_label,CD_detail.Album_id,CD_detail.Album_name');
query1.sql.Add('from CD_detail,Song,Album');
query1.sql.Add('where Album.Album_id=Song.Album_id');
query1.sql.Add('and Song.Album_id=CD_detail.Album_id');
query1.sql.add('and Album.language="國語"');
query1.sql.Add('and Song.song_name like "___"');
query1.open;
我現在要做一個功能就是如果User選取歌曲是2字部,3字部......請教這個問題該如何解決
我用了萬用字元 like but....
變成data過濾出來
[Ex]
欄位
Song_name 一往情深
悲傷止步
用心良苦
Stay
Blue
..
..
..
(不該有英文字母)
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
jojoboy
初階會員 發表:65 回覆:108 積分:34 註冊:2002-03-13 發送簡訊給我 |
|
dicky
一般會員 發表:8 回覆:12 積分:4 註冊:2002-08-07 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
dicky
一般會員 發表:8 回覆:12 積分:4 註冊:2002-08-07 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
dicky
一般會員 發表:8 回覆:12 積分:4 註冊:2002-08-07 發送簡訊給我 |
引言: Length是oracle的, Sybase可用DataLength, 至於LocalSql(Delphi for .db及.dbf)真的無相對function 以上問題可改用 and Trim(substring(Song.song_name from 5))='' Sql的問題若先說明用那種資料庫可縮短解決時間, 因各資料庫差異性實在很大try 不出來 出現Error Message (Unexpected end of command Token:') query1.sql.Add('and Trim(substring(Song.song_name from 4))='''); 上面的Code不知哪裡語法出問題,是引號方面嗎????煩請不另賜教...thanks.... |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
dicky
一般會員 發表:8 回覆:12 積分:4 註冊:2002-08-07 發送簡訊給我 |
引言: 若要長度為4, 應該是由5起為空白, 故應是from 5 query1.sql.Add('and Trim(substring(Song.song_name from 5))=''''');用query1.sql.Add('and trim(substring(Song.song_name from 5))=''''');指令下去try try 出來的結果很奇怪 Song_name(歌名) ----------------- 禮物 逃脫 朋友 怎麼了 游泳 夢見 Stay ... ... ... 資料不一致,那如果改用Table -->Setkey Methond會比較好嗎??????? |
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
dicky
一般會員 發表:8 回覆:12 積分:4 註冊:2002-08-07 發送簡訊給我 |
引言: 若要長度為4, 應該是由5起為空白, 故應是from 5 query1.sql.Add('and Trim(substring(Song.song_name from 5))=''''');若我現在要的結果是(歌曲是3部曲)就是長度為6 ,所以應該是由7起為空白 query1.sql.Add('and Trim(substring(Song.song_name from 7))='''''); 但結果try出來導致資料不一致 1.我有試過用單一資料庫作測試(純粹用一個資料表)如果是 (1) from 4 資料正確 (2) from 5 資料不正確 Ex 游泳 怎麼了 怎麼說 消息 (3)from 6 資料不正確 跟(2)一樣,資料不一致 2.我也有試過別的欄位看它的長度,結果Run出來情形差不多 是否指令還要更改哪裡 還有請教紅色部分是什麼意思,為什麼要4個引號thanks..... query1.sql.Add('and Trim(substring(Song.song_name from 7))='''''); |
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 我現在要做一個功能就是如果User選取歌曲是2字部,3字部......請教這個問題該如何解決站長也來加入戰局, 我曾幫醫師寫過一個私人的卡拉OK程式, 其中也有查幾字部的功能, 我的做法比較不一樣, 我是再輸入資料時在歌名的欄位song_name的事件OnSetData中去計算字數, 再入另外一個欄位song_words(字數欄位), 如此Select時只要指定where song_words=3 and song_language='國語' 就是三字部的國語歌了 計算字數很簡單,用 length(widestring(text)) 就可算出國語歌的字數 英文歌的字數用 length(text)就可以了 這個另類辦法供您參考 ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
query1.sql.Add('and Trim(substring(Song.song_name from 7))=''''')
query1.sql.Add('and Trim(substring(Song.song_name from 6 for 1) <>''''');
看到結果可以想想為什麼啊
原條件限制了字串長度不可超過6, 但只要小於7都符合, 所以再加一條件, 6的位置不可空白 為什麼要4個引號
空白本是兩個引號, 但直接用引號造成與前面字串引號之衝突
query1.sql.Add('and Trim...
故用''''', 前面每兩個代表一個', 最後一個則為整個字串之結束 你也可以寫成
query1.sql.Add('and Trim(substring(Song.song_name from 7))='#39#39);
(#39 就是')
或
query1.sql.Add('and Trim(substring(Song.song_name from 7))=' quotedStr(''));
|
dicky
一般會員 發表:8 回覆:12 積分:4 註冊:2002-08-07 發送簡訊給我 |
引言:我有引用站長的另類辦法 因為我是用DBgrid1的元件作資料的輸入 所以當User輸入完資料時,在User按下Save時我在OnClick事件下去作判斷 bk:=dbgrid1.DataSource.DataSet.GetBookmark(); dbgrid1.DataSource.DataSet.first; while not dbgrid1.DataSource.DataSet.Eof do begin dbgrid1.DataSource.DataSet.edit; table2.FieldByName('Song_words').asinteger:=length(table2song_name.asstring); dbgrid1.DataSource.DataSet.post; dbgrid1.DataSource.DataSet.Next; end; dbgrid1.DataSource.DataSet.GotoBookmark(bk); dbgrid1.DataSource.DataSet.FreeBookmark(bk); 結果Data Run出來沒有問題,是可以計算But 1.如果選國語字部曲時,可能會產生一些問題 因為一張國語專輯可能裡面夾帶一些英文歌 所以如果SQL指令下where song_words=3 and song_language='國語' 可能Data裡面會過濾出一些英文歌(是否能避免???????) 2.英文歌我可以用萬用字元like 指定為A,B,C....開頭的字部 望不吝指導Thanks..........引言: 我現在要做一個功能就是如果User選取歌曲是2字部,3字部......請教這個問題該如何解決站長也來加入戰局, 我曾幫醫師寫過一個私人的卡拉OK程式, 其中也有查幾字部的功能, 我的做法比較不一樣, 我是再輸入資料時在歌名的欄位song_name的事件OnSetData中去計算字數, 再入另外一個欄位song_words(字數欄位), 如此Select時只要指定where song_words=3 and song_language='國語' 就是三字部的國語歌了 計算字數很簡單,用 length(widestring(text)) 就可算出國語歌的字數 英文歌的字數用 length(text)就可以了 這個另類辦法供您參考 ~~~Delphi K.Top討論區站長~~~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |