2013-05-14 45 views
1

我在MySQL表中只有一個存儲VARCHAR列的數字。當我運行查詢從varchar列在MySQL中沒有得到超過999的最大值

SELECT MAX(title_no) as title_no from mytable
時,我得到999,但在title_no列中,表中值> 999的記錄更多。

我不允許將列從varchar更改爲int。請幫助我獲得正確的nuber。

感謝

+1

如果它只存儲數字 - 它應該是'INT'類型 – zerkms 2013-05-14 05:15:31

+0

'999'>'1111' - 這就是詞典排序的工作原理。 – user2246674 2013-05-14 05:20:18

回答

5
MAX(CAST(title_no AS SIGNED)) 

0

用另一種方式嘗試。

SELECT MAX(CAST(title_no AS SIGNED)) AS title_no FROM mytable; 

OR

SELECT MAX(CONVERT(title_no,UNSIGNED INTEGER)) FROM mytable; 

OR

SELECT MAX(title_no * 1) AS title_no FROM mytable 
+0

查看你的sql語法,第二個和第三個查詢也不會給出正確的結果。 – ankurtr 2013-05-14 05:26:01

+0

是在空柱上它將返回空白。 – 2013-05-14 05:30:02

0

你需要cast爲數值型,否則將被歸類爲一個字符串,而不是一個數字:

SELECT MAX(CAST(title_no AS SIGNED)) 
AS title_no 
FROM mytable; 
0

您需要使用CAST here.Because它處理爲一個字符串而不是一個number.Because你聲明爲varchar

MAX(CAST(title_no AS SIGNED)) 
1

您可以使用這一個 -

SELECT MAX(title_no * 1) AS title_no FROM mytable 
+0

不錯的把戲。你能解釋一下這是如何工作的嗎? – ankurtr 2013-05-14 05:36:19

+1

是的,它看起來像一個伎倆;但它是一種MySQL轉換行爲。從文檔 - 要在數字上下文中將字符串轉換爲數字值,除了使用字符串值之外,通常不需要進行其他操作,就好像它是一個數字一樣。在這裏查看更多信息 - [Cast Functions and Operators](http://dev.mysql.com/doc/refman/5.5/en/cast-functions.html)。 – Devart 2013-05-14 05:42:56

+0

謝謝。確實有用:) – ankurtr 2013-05-14 05:47:35

0

這是因爲這將是字符比較爲您現場是varchar類型的。您需要將其轉換爲Integer。看到這個SQL FIDDLE