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

取數字

尚未結案
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-15 12:01:00 IP:218.17.xxx.xxx 未訂閱
因現有一欄規格﹐比如 6.35mm*8'; 15.8mm*8' 想排序.當然想取最前的數字來排序。有沒有這樣的函數只取最前面的數字.
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-15 21:05:38 IP:211.74.xxx.xxx 未訂閱
★請先說明你所使用的資料庫系統    如果是Access 方法如下:    SELECT * from aaa order by val(a) 加val 取得數字    
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-15 21:30:22 IP:61.221.xxx.xxx 未訂閱
請問取最前面的數字來排序是指 6.35 和 15.8, 也就是 mm 之前的數字嗎? 還是第一個數字 6, 1 呢? 若是 mm 之前的話: (6.35, 15.8) select * from table order by convert(float, left(規格, charindex('mm', 規格)-1)) 若是第一個數字的話: (6, 1) select * from table order by convert(int, left(規格, 1)) [以上的函數是 MSSQL 的]
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-16 07:58:10 IP:61.155.xxx.xxx 未訂閱
select * from table order by  integer(substr(規格,1,length(規格)-POSSTR(LCASE(規格), 'mm')))    [IBM DB2]    风花雪月 e梦情缘
------
风花雪月 e梦情缘
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-16 08:32:47 IP:218.17.xxx.xxx 未訂閱
謝謝各位﹐這個位置不是固定不變的﹐有時是mm﹐有可能是m,有時還沒有全是漢字,比如6.35mm*8';7.94mm*8';15.8mm*8'; 20mm*60mm*1m﹔直徑100mm*1m﹔直徑10mm*1m﹐16MM*295MM*220MM;國產;等等,所以經理看起來數字相似的要能按理想的排序﹐輸入的規格是字符型。長短不一.是Access數據庫.所以我想來想去不知怎么排序才能滿意。可能要求以上的結果是:6.35mm*8';7.94mm*8';15.8mm*8'; 20mm*60mm*1m,直徑10mm*1m,直徑100mm*1m,國產,所以取一定的mm是否有誤,有沒有什么更好的辦法.
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-16 09:17:18 IP:218.16.xxx.xxx 未訂閱
這應不可能在 SQL 裡達到罷 ? 若你可以將 ADOQuery 接上 DataSet Provider 接上 ClientDataSet 然後在 ClientDataSet 處理數據,我有方法應可以做到,但若使用 ClientDataSet 不附合你的系統,那就免談了因為也不是幾句說話可講完的。
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-16 09:32:43 IP:61.218.xxx.xxx 未訂閱
你試過我的方法嗎?,怎麼說不行?    SELECT * from aaa order by val(a)    這段是依照"數字",以"數值型態"排序的結果,例: 1.22 3.67 7.9 10.3 15.5    SELECT * from aaa order by a    這段是依照"數字",以"字串型態"排序的結果,例: 1.22 10.3 15.5 3.67 7.9    那一種是你要的?    還有一點提醒,有時候是 mm 有時候是 m 基本上單位就不一樣了, 排出來的結果也不見得正確,例:    1.54 m *8 6.35 mm * 8    二者該如何排序? 是以實際的大小排序? 還是僅依數值不管單位排序?        
arnoyu
中階會員


發表:73
回覆:88
積分:67
註冊:2003-03-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-16 10:03:12 IP:61.56.xxx.xxx 未訂閱
>> 這個位置不是固定不變的﹐有時是mm﹐有可能是m,有時還沒有全是漢字 呵! 比兄,你的欄位資料在設計時大概沒先正規劃吧, 你現在要排序的欄位內容是字串格式且內容沒一定的編排存放, 如此,若資料量龐大的時候,我看用SQL怎麼Query仍會有粉多問題的~ 若現在資料量還不大時,改一下這個DataSet(或重建資料表),多增幾個欄位, 將 規格,輪寬,國別,型別.....用所需型別欄位分開存放, 這樣日後的查詢才會較有效率也較有可能找出所要的資料.. ~~ 小小建議,參考一下ㄅ ~~ ======================= ● 學孩無牙,唯勤是岸 ● ======================= 因為無牙,所以要勤奮的吸.. 待他日羽翼豐滿時,別忘了 這個滋潤我們成長的園地~~
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-16 10:07:47 IP:218.17.xxx.xxx 未訂閱
[quote] ★請先說明你所使用的資料庫系統 如果是Access 方法如下: SELECT * from aaa order by val(a) 加val 取得數字 Val只能取第一位是數字型的數字﹐如果數字在中間能否也取出來,比如:直徑12.5m*6,產125.6mm.能否取到 12.5,125.6.
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-16 11:59:13 IP:61.218.xxx.xxx 未訂閱
引言:因現有一欄規格﹐比如 6.35mm*8'; 15.8mm*8' 想排序.當然想取最前的數字來排序。有沒有這樣的函數只取最前面的數字.
引言:Val只能取第一位是數字型的數字﹐如果數字在中間能否也取出來,比如:直徑12.5m*6,產125.6mm.能否取到 12.5,125.6.
如果硬是要弄,也是可以,不過你的欄位就要有一定的規則 不過只會讓問題更複雜,回歸源頭來想,你的資料庫當初在規畫就沒有想到這一部份 事後要再以不合理的方法來做合理的排序…不妥 arnoyu 講的才是合理的做法
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-16 14:04:42 IP:218.17.xxx.xxx 未訂閱
謝謝各位﹐現我明白了﹐不過我現要求字母及漢字寫在后面﹐晝量讓數字在最前面﹐只對最前面的數字進行排序﹐就ok,比如對12mm*13mm*1,12mm*14mm*1對中間或最后的數字(比如13mm,14mm就不比較了).這樣就可用ddy所講的只用val可排序﹐但有時會在資料庫中有空格,當然不是空﹐是null(因是Access),這時在access中用val(spec) 排序﹐會出錯﹐如果用 spec is not null 過濾﹐則會把規格是空的過濾掉了﹐現只對spec不為空的排序﹐sql語句如何寫(當然顯示所有的規格)
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-16 17:57:56 IP:61.155.xxx.xxx 未訂閱
SELECT * from aaa where  spec is not null order by val(a) union all SELECT * from aaa where  spec is  null    风花雪月 e梦情缘
------
风花雪月 e梦情缘
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-05-17 08:10:41 IP:218.17.xxx.xxx 未訂閱
[quote] SELECT * from aaa where spec is not null order by val(a) union all SELECT * from aaa where spec is null 謝謝﹐此式不能排序。如果過濾掉spec is not null 則SELECT * from aaa where spec is not null order by val(a)可以排﹐而你所寫的不知為什么不排﹐我已試了﹐不知問題所在?
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-05-17 08:46:52 IP:61.155.xxx.xxx 未訂閱
SELECT FIELD1,FIELD2,....,case when (spec is not null) then spec when (spec is null) then '0' end as spec from aaa order by val(spec 风花雪月 e梦情缘
------
风花雪月 e梦情缘
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-05-17 08:50:49 IP:61.59.xxx.xxx 未訂閱
SELECT val(a) from  aaa  where isnull(a)=False        或    SELECT val(a) from  aaa  where not isnull(a)    要用isnull() 函數,它會檢查欄位是否為null     發表人 - ddy 於 2003/05/17 08:55:44
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-05-17 10:01:36 IP:218.17.xxx.xxx 未訂閱
[quote] SELECT FIELD1,FIELD2,....,case when (spec is not null) then spec when (spec is null) then '0' end as spec from aaa order by val(spec 謝謝﹐我試了你的查詢時出錯﹐通不過﹐可能是access不支持或是此名有誤﹐不過你到提示了我,用了另外一條可以通過﹐不過這是原來本來不是空值(是null)變為空值('')﹐能不能不改變原值呢﹖ SELECT iif(isnull(spec),' ',spec) from Goods order by 1
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-05-17 10:06:48 IP:61.155.xxx.xxx 未訂閱
我上面用的CASE语句,是一般大型数据常用的,可能是ACCESS不支持吧。 对于ISNULL的值,可能就只有变换,才能参与合法的运算了。因为ISNULL与任何类型多不兼容的。    供参考!    风花雪月 e梦情缘
------
风花雪月 e梦情缘
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-05-17 10:24:40 IP:218.17.xxx.xxx 未訂閱
[quote] 我上面用的CASE语句,是一般大型数据常用的,可能是ACCESS不支持吧。 对于ISNULL的值,可能就只有变换,才能参与合法的运算了。因为ISNULL与任何类型多不兼容的。 不好意思﹐剛才搞錯了,我寫的此句不能滿足我按val(spec)排序, SELECT iif(isnull(spec),' ',spec) FROM Goods ORDER BY 1 這句還是沒按val(spec)排序,如果改為 SELECT iif(isnull(spec),' ',spec) FROM Goods ORDER BY val(spec)通不過,因為還是沒按iif(isnull(spec),' ',spec)的規格來排﹐還是按本來的字段來排當然有null值在里面。出錯.到底如何來做﹖
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-05-17 10:32:14 IP:218.17.xxx.xxx 未訂閱
謝謝各位 用此句搞定,SELECT val(iif(isnull(spec),' ',spec)),spec FROM Goods ORDER BY 1 ; 不過只是前面有漢字時能否自動過濾掉.
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-05-17 10:42:16 IP:61.155.xxx.xxx 未訂閱
这可能单纯的SQL语法,是不可能做到的;给你个提示,你可以将他转换CHRB ,不知这个函数ACCESS是否支持。    供参考!    风花雪月 e梦情缘
------
风花雪月 e梦情缘
比爾丐自
初階會員


發表:33
回覆:115
積分:29
註冊:2003-02-14

發送簡訊給我
#21 引用回覆 回覆 發表時間:2003-05-19 19:35:39 IP:218.17.xxx.xxx 未訂閱
謝謝各位,大家說的都有理﹐都對我有幫助﹐再次說聲謝謝﹗ 發表人 - 比爾丐自 於 2003/05/19 19:38:06
系統時間:2024-11-23 3:49:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!