2012-08-07 141 views
0

這裏的查詢MySQL查詢爲大於where子句

SELECT * FROM表WHERE ID = '7883c2c8e6' 和值> '45' DESC

但由於某些原因返回較小的值它返回一個字段值爲8的行。我已經檢查過,它沒有前面或後面的字符。該字段當前設置爲varchar。我想知道這是否會影響結果?

如果我改變>的方向爲<這一行不顯示,但它應該是另一種方式肯定?

+0

如果要按值排序,請將值設爲數值列,即INT或FLOAT或DECIMAL。現在它是一個'CHAR'(我假設)和'<'按字典順序進行比較。 – 2012-08-07 18:38:53

回答

2

因爲'8'大於'45'(按字母順序)。

Cast自己的價值觀來詮釋:

AND convert(value, unsigned) > 45 
+0

'convert(value,int)'將失敗! 'convert(value,UNSIGNED)'不會。此外,'DESC'不允許在那裏。 – 2012-08-07 20:39:14

+0

@RossSmithII,修正。謝謝。這很尷尬。 – danihp 2012-08-08 03:16:29

+0

不需要感到尷尬。我犯了同樣的錯誤很多次,我輸了! – 2012-08-08 06:02:31

0
SELECT * FROM TABLE 
WHERE id = '7883c2c8e6' AND (value * 1) > 45 
order by value DESC 
1

The field is currently set as varchar

這是個問題;如果在文本字段上使用比較運算符,它將按字母順序排序結果,而不是按數字排序。

爲了解決它,請將字段設置爲整數。