2011-10-21 33 views
1

我有一種情況,其中列名c_id在varchar中,但包含整數或空值。 (我不能改變數據類型,因爲它在這個項目中使用很長,在很長的時間內,在我的項目中)存儲在varchar字段中的整數值在訂購時給出了不同的結果

我的問題是每當我嘗試按該表的順序排列時,它就會顯示我損壞的結果,我搜索最大值,它不會根據其大小給我最大值。

我不知道它是否以ASCII形式存儲在內部,但我不是很確定。 請幫助我知道這是爲什麼發生。

謝謝。

+0

不過,您是否希望將列更改爲整數數據類型? –

回答

5

嘗試使用CAST功能:

SELECT CAST(c_id AS UNSIGNED INTEGER) id, field1, field2 
FROM your_table 
ORDER BY id 

SELECT 
    CASE 
     WHEN c_id IS NULL THEN 0; 
     ELSE CAST(c_id AS UNSIGNED INTEGER); 
    END AS id 
    , field1, field2 
FROM your_table 
ORDER BY id 
+0

Marco,'END CASE;'在存儲過程中使用** **不在查詢中,在查詢中只是END,沒有';'我知道這是幾乎不可能的谷歌正確的頁面'mysql case' ,但這是標準的SQL,如果你谷歌'CASE ANSI SQL'你應該得到正確的信息。 – Johan

+0

@Johan:你剛剛解釋了我的錯誤,並且已經編輯了我的代碼......我應該告訴你什麼?非常感謝,真的! :) – Marco

+0

我會'NULL'用'NULL' :) –

1

您可以使用CAST功能。下面是一些代碼,向您展示一個示例以及它在返回結果中的差異:

mysql> SELECT CAST('19.45' AS DECIMAL(5,2)) as result; 

+--------+ 
| result | 
+--------+ 
| 19.45 | 
+--------+ 

1 row in set (0.04 sec) 
相關問題