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

請教一個SQL語法問題

答題得分者是:ccchen
dicky
一般會員


發表:8
回覆:12
積分:4
註冊:2002-08-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-18 15:21:42 IP:61.217.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-18 16:25:12 IP:61.219.xxx.xxx 未訂閱
query1.sql.Add('and Song.song_name like "___"'); 各資料庫解釋不同 可改成 query1.sql.Add('and length(Trim(Song.song_name))=4'); //for Oracle 不過length, Trim均須資料庫不同而定, 自己查一下 query1.sql.add('and Album.language="國語"'); (不該有英文字母) 照說應該對, 查查是否有錯誤資料吧
jojoboy
初階會員


發表:65
回覆:108
積分:34
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-18 17:48:33 IP:61.220.xxx.xxx 未訂閱
query1.sql.Add('and Song.song_name like "___"'); 試試看改為 and substring(Song.song_name from 1 for 1) = '4' 私人拙見....望不吝指教
dicky
一般會員


發表:8
回覆:12
積分:4
註冊:2002-08-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-20 20:06:24 IP:61.217.xxx.xxx 未訂閱
try 不出來 有查過SQL指令似乎try不出來 substring也試過 query1.sql.Add('and substring(Song.song_name,1,4)');也不行 是否還有別的方法or別種的指令 謝謝.....
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-20 22:06:55 IP:203.217.xxx.xxx 未訂閱
你是要找長度為4的吧? and length(Trim(Song.song_name))=4 看你用什麼資料庫,我再告訴你吧
dicky
一般會員


發表:8
回覆:12
積分:4
註冊:2002-08-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-09-23 17:06:47 IP:61.217.xxx.xxx 未訂閱
引言: 你是要找長度為4的吧? and length(Trim(Song.song_name))=4 看你用什麼資料庫,我再告訴你吧
您好: 我是用Delphi裡面(Database Desktop 附檔名.DB)的資料庫 望不另賜教.......... Thanks...
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-09-23 18:32:43 IP:211.22.xxx.xxx 未訂閱
查了一下 Help(Borland Database Engine -> Local SQL Help) Paradox 有 Trim 這個 Function, 但是沒有 Length 這個 function 說。 -- Everything I say is a lie.
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-09-24 09:12:39 IP:61.219.xxx.xxx 未訂閱
Length是oracle的, Sybase可用DataLength, 至於LocalSql(Delphi for .db及.dbf)真的無相對function  以上問題可改用 and Trim(substring(Song.song_name from 5))='' Sql的問題若先說明用那種資料庫可縮短解決時間, 因各資料庫差異性實在很大
dicky
一般會員


發表:8
回覆:12
積分:4
註冊:2002-08-07

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-09-24 09:47:36 IP:61.217.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-09-24 10:15:37 IP:211.22.xxx.xxx 未訂閱
改成:
  query1.sql.Add('and Trim(substring(Song.song_name from 4))=''''');
-- Everything I say is a lie.
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-09-24 13:08:17 IP:61.219.xxx.xxx 未訂閱
若要長度為4, 應該是由5起為空白, 故應是from 5 query1.sql.Add('and Trim(substring(Song.song_name from 5))=''''');
dicky
一般會員


發表:8
回覆:12
積分:4
註冊:2002-08-07

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-09-24 14:07:48 IP:61.217.xxx.xxx 未訂閱
引言: 若要長度為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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-09-24 22:13:21 IP:203.217.xxx.xxx 未訂閱
我試了一下, 應該沒問題 怎麼了 在我這裡沒有這一筆 Stay 長度為4故符合條件,應該檢查另一條件 query1.sql.add('and Album.language=' #39'國語'#39); 檢查該筆資料在Album.language是否正確
dicky
一般會員


發表:8
回覆:12
積分:4
註冊:2002-08-07

發送簡訊給我
#14 引用回覆 回覆 發表時間:2002-09-25 02:57:38 IP:61.217.xxx.xxx 未訂閱
引言: 若要長度為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

發送簡訊給我
#15 引用回覆 回覆 發表時間:2002-09-25 08:13:54 IP:61.219.xxx.xxx 未訂閱
引言: 我現在要做一個功能就是如果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

發送簡訊給我
#16 引用回覆 回覆 發表時間:2002-09-25 08:27:00 IP:61.219.xxx.xxx 未訂閱
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

發送簡訊給我
#17 引用回覆 回覆 發表時間:2002-09-27 17:44:11 IP:61.217.xxx.xxx 未訂閱
引言:
引言: 我現在要做一個功能就是如果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討論區站長~~~
我有引用站長的另類辦法 因為我是用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..........
系統時間:2024-04-29 8:28:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!