我在MySQL表中只有一個存儲VARCHAR列的數字。當我運行查詢從varchar列在MySQL中沒有得到超過999的最大值
SELECT MAX(title_no) as title_no from mytable時,我得到999,但在title_no列中,表中值> 999的記錄更多。
我不允許將列從varchar更改爲int。請幫助我獲得正確的nuber。
感謝
我在MySQL表中只有一個存儲VARCHAR列的數字。當我運行查詢從varchar列在MySQL中沒有得到超過999的最大值
SELECT MAX(title_no) as title_no from mytable時,我得到999,但在title_no列中,表中值> 999的記錄更多。
我不允許將列從varchar更改爲int。請幫助我獲得正確的nuber。
感謝
MAX(CAST(title_no AS SIGNED))
。
用另一種方式嘗試。
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
查看你的sql語法,第二個和第三個查詢也不會給出正確的結果。 – ankurtr 2013-05-14 05:26:01
是在空柱上它將返回空白。 – 2013-05-14 05:30:02
你需要cast爲數值型,否則將被歸類爲一個字符串,而不是一個數字:
SELECT MAX(CAST(title_no AS SIGNED))
AS title_no
FROM mytable;
您需要使用CAST
here.Because它處理爲一個字符串而不是一個number.Because你聲明爲varchar
MAX(CAST(title_no AS SIGNED))
您可以使用這一個 -
SELECT MAX(title_no * 1) AS title_no FROM mytable
不錯的把戲。你能解釋一下這是如何工作的嗎? – ankurtr 2013-05-14 05:36:19
是的,它看起來像一個伎倆;但它是一種MySQL轉換行爲。從文檔 - 要在數字上下文中將字符串轉換爲數字值,除了使用字符串值之外,通常不需要進行其他操作,就好像它是一個數字一樣。在這裏查看更多信息 - [Cast Functions and Operators](http://dev.mysql.com/doc/refman/5.5/en/cast-functions.html)。 – Devart 2013-05-14 05:42:56
謝謝。確實有用:) – ankurtr 2013-05-14 05:47:35
這是因爲這將是字符比較爲您現場是varchar類型的。您需要將其轉換爲Integer。看到這個SQL FIDDLE
如果它只存儲數字 - 它應該是'INT'類型 – zerkms 2013-05-14 05:15:31
'999'>'1111' - 這就是詞典排序的工作原理。 – user2246674 2013-05-14 05:20:18