取數字 |
尚未結案
|
比爾丐自
初階會員 發表:33 回覆:115 積分:29 註冊:2003-02-14 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
請問取最前面的數字來排序是指 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 發送簡訊給我 |
|
比爾丐自
初階會員 發表:33 回覆:115 積分:29 註冊:2003-02-14 發送簡訊給我 |
謝謝各位﹐這個位置不是固定不變的﹐有時是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 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
你試過我的方法嗎?,怎麼說不行? 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 發送簡訊給我 |
>> 這個位置不是固定不變的﹐有時是mm﹐有可能是m,有時還沒有全是漢字 呵! 比兄,你的欄位資料在設計時大概沒先正規劃吧,
你現在要排序的欄位內容是字串格式且內容沒一定的編排存放,
如此,若資料量龐大的時候,我看用SQL怎麼Query仍會有粉多問題的~
若現在資料量還不大時,改一下這個DataSet(或重建資料表),多增幾個欄位,
將 規格,輪寬,國別,型別.....用所需型別欄位分開存放,
這樣日後的查詢才會較有效率也較有可能找出所要的資料.. ~~ 小小建議,參考一下ㄅ ~~ =======================
● 學孩無牙,唯勤是岸 ●
=======================
因為無牙,所以要勤奮的吸..
待他日羽翼豐滿時,別忘了
這個滋潤我們成長的園地~~
|
比爾丐自
初階會員 發表:33 回覆:115 積分:29 註冊:2003-02-14 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
引言:因現有一欄規格﹐比如 6.35mm*8'; 15.8mm*8' 想排序.當然想取最前的數字來排序。有沒有這樣的函數只取最前面的數字. 引言:Val只能取第一位是數字型的數字﹐如果數字在中間能否也取出來,比如:直徑12.5m*6,產125.6mm.能否取到 12.5,125.6.如果硬是要弄,也是可以,不過你的欄位就要有一定的規則 不過只會讓問題更複雜,回歸源頭來想,你的資料庫當初在規畫就沒有想到這一部份 事後要再以不合理的方法來做合理的排序…不妥 arnoyu 講的才是合理的做法 |
比爾丐自
初階會員 發表:33 回覆:115 積分:29 註冊:2003-02-14 發送簡訊給我 |
謝謝各位﹐現我明白了﹐不過我現要求字母及漢字寫在后面﹐晝量讓數字在最前面﹐只對最前面的數字進行排序﹐就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 發送簡訊給我 |
|
比爾丐自
初階會員 發表:33 回覆:115 積分:29 註冊:2003-02-14 發送簡訊給我 |
|
wnhoo
高階會員 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
|
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
|
比爾丐自
初階會員 發表:33 回覆:115 積分:29 註冊:2003-02-14 發送簡訊給我 |
[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 發送簡訊給我 |
|
比爾丐自
初階會員 發表:33 回覆:115 積分:29 註冊:2003-02-14 發送簡訊給我 |
[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 發送簡訊給我 |
|
wnhoo
高階會員 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
|
比爾丐自
初階會員 發表:33 回覆:115 積分:29 註冊:2003-02-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |