2009-02-12 89 views

回答

1

如果可能,嘗試拆分數據,以便任何數字信息都在其自己的字段中。 字段中的字符串數據和數字數據總是會產生字符串類型的數據,因此'A2'>'A11'。

1

您需要將varchar數據轉換/轉換爲數字數據類型,然後通過對數據進行排序來執行排序。

你可能還需要分割你的數據串,所以例如通過caluse順序可能是:

order by 
convert(int,left(columnName,2)) asc, 
convert(int,subtring(columnName,4`,2)) 

這將取決於哪一個字符串元素代表其日期組件。

有意義嗎?

0

修改表格並添加一個比較列。編寫一個讀取字符串的小程序,並將它們轉換爲數據庫可以轉換的格式。就你而言,我想DATE是一個很好的候選人。

在一般情況下,使用VARCHAR列並將所有數字格式化爲五個(或更多)數字(使用前導零/空格,即右對齊)。

之後,您可以使用比較列來排序數據。

0

如果我是你,我會通過一個棘手的表達命令。我們假設斜線前最多有2或3位數字。如果你寫

order by case charindex('/', val) 
      when 0 then convert(int, val) 
      else convert(int, substr(val, 1, charindex('/', val) -1) 
     end * 1000 
      + case charindex('/', val) 
       when 0 then 0 
       else convert(float, replace(substring(val, 1 + charindex('/', val), 
                length(val)), '-', '.')) 
      end 

如果我沒有任何拼寫錯誤,下面應轉換05至5000,5月1日至5001,05/1-1至5001.1,事情應該排序您想要的方式,假設連字符後最多隻有一個數字。否則,你可以通過分割和左邊填充適當數量的零來解決它,但是表達式會變得更醜陋......

相關問題