2014-02-23 62 views
0

我想知道爲什麼當我運行WHERE xyz < 5其中xyz是一個字符串它仍然會帶回結果。爲什麼或者如何做到這一點,以便如果我搜索「大於」或任何數學運算,比如> < < => =,那麼它只會返回零結果。MySql大於字符串

如果一個字符串是使用數學函數進行搜索,我希望它能夠帶回零結果,並且我很困惑,爲什麼它帶回的結果與「LKJLK」不可能比任何東西都大,因爲它不是一個數字。這不應該返回false。謝謝你的幫助。

+1

當涉及到文本值時,「大於」和「小於」的意思是「在字母后面」和「在字母前面出現」。這在數據庫和幾乎所有的編程語言中都是非常標準的東西。如果你不想比較字符串與那些操作符,那麼也許你不應該比較字符串與那些操作符。不要期望數據庫能夠讀懂你的想法;編寫代碼來做你想做的事,而不是做你不想做的事。如果你的代碼將字符串與數字進行比較,那麼這是糟糕的代碼 – jmcilhinney

+0

感謝您的回覆,這是有道理的。我試圖創建一個全局搜索按鈕,搜索所有的列,但因爲一些列是字符串和一些int。我想生病必須建立一個工作。謝謝。 – user982853

+0

您是否正在創建一個包含MySQL後端的應用程序?您可以將邏輯放入應用程序代碼中,以確保比較始終使用適當的類型。您當然不應該排除對字符串的比較搜索,因爲測試文本列中的值是否小於'5'是相當合理的。 – jmcilhinney

回答

0

一個選項是添加額外的WHERE子句以確保該值是一個數字。例如:

SELECT Data 
    FROM table 
    WHERE Data > 10 
    AND Data REGEXP '^-?[0-9]+$'; 

這是一個sqlFiddle顯示它的行動。

還有其他方法可以測試值是否爲數字。在SO上搜索會給你更多的方法。

0
Select 
USername 
from 
users 
where username>'  ' 

這將從用戶名中選擇大於5個位置的用戶名。你在找什麼?