SQL查詢語法的問題 |
尚未結案
|
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
請問
如資料有A001,A002,A003 ~ A009
請問再下列語法中如T1=A002 T2=A008
但查詢的結果會是A003~A008,為何查詢結果的首筆不會是A002,不是已經設為
FD1 >= T1,怎麼不會包含T1之值?,但尾筆(<=)之結果卻有
SQL.Clear;
SQL.Add('Select * from AAA');
SQL.Add'AND '+FD1+'>='''+TRIM(T1)+'%'+'''AND '+FD1+'<='''+TRIM(T2)+'%'+'''');
SQL.Add('Order by FD1');
SQL.Close;
SQL.Open;
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
感謝chih的指示,亦感謝timhuang,讓我更明瞭其道理
補充:少寫了WHERE這一段希望不要誤會SQL.Add('Where FD1 is not Null');
我用BETWEEN確實就OK了,但還有一些疑問,假設資料有A001...B001....
1.當T1無值時,代表重頭開始至T2
SQL.Add('AND ' FD1 '>=''''' 'AND ' FD1 '<=''' TRIM(T2) '''');
OR 加 %
SQL.Add('AND ' F_NAME '>=''''' 'AND ' FD1 '<=''' TRIM(T_STR2) '%' '''');
//-->結果還是不含最後一筆,與先前之問題好像有點矛盾,先前雖有誤,但會有最後一筆,在此卻不會包含最後一筆.
2.當T2無值時,代表從T1開始至結尾,含T1僅有開頭字首,如T1=A
SQL.Add('AND ' FD1 '>=''' TRIM(T_STR1) '''');//-->結果OK
3.如何當查詢值可能只輸入起始字元,如只輸入A ~ B (代表A**~B**)
我用了BETWEEN的做法,如果查詢值完全符合,如A001~Z001結果OK,
如查詢值只有A ~Z則末筆不會有包含Z的這一筆,所以會想加入%
可否請與指點指點 THANKS
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
1. 所謂不含最後一筆是不是你的 T2 是 B001 但你的最後一筆是 B004 ??
可以的話, 可否描述再詳細一些.
3. 可以使用 left 函數 如: left(FD1,1) >= 'A' and left(FD1,1) <= 'B'
當然使用 BETWEEN 亦可 left(FD1,1) between 'A' and 'B'
你若是直接下 FD1 >= 'A' and FD1 <= 'Z' 的話, 'Zxxxx' 都是大於 'Z' 的, 所以不會在條件中哦. 所以 Axxxx, Bxxxx ..... Yxxxx 都會出現, 但是 Zxxxx 就不會出現了. 另外, 你可能誤會了 % 的意義, % 只對 like 指令有效, 你把他寫入字串中, 就只是一個字串值, 不會有 like 中的 % 代表任何字元的意義哦~ 發表人 - timhuang 於 2003/04/16 00:37:45
|
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
Tanks fo timhuang..
這麼一說我以了解原來是其<>之關係
如資料為
AA001.AB002...BA001.BB002...CA001.CB001
如查詢條件為AB002~BA001 --結果--> AB002.AC003....BA001--條件完全符合故結果合理
如查詢條件為A~B --結果--> AA001.AB002.AC003....(直至BA001以前)
因是>B,所以只有BA001以前的資料.
Tahnks 我懂了...
是否有可能將查詢條件為A~B之查詢結果為--> AA001.AB002.AC003....BA001.BB002...(包含A.B開頭範圍內之所有資料)
也就是暨between二值之範圍,該值又是類似萬用字元
Between like Value1 and like Velue2 ..不過好像沒有這樣的語法
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
引言: 是否有可能將查詢條件為A~B之查詢結果為--> AA001.AB002.AC003....BA001.BB002...(包含A.B開頭範圍內之所有資料) 也就是暨between二值之範圍,該值又是類似萬用字元 Between like Value1 and like Velue2 ..不過好像沒有這樣的語法若是要以 A. B 開頭的所有資料的話, 用 like 加 % 的方式是比較理想的, 例: select * from table where (FD1 like 'A%') or (FD1 like 'B%') 要是一定要用範圍式的話, 如 between 或 >, < 這樣的方式, 則必須配合 left 用: select * from table where left(FD1,1) >= 'A' and left(FD1,1) <='B' 或 select * from table where left(FD1,1) between 'A' and 'B' 如同我前一篇的第3點. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |