我想知道爲什麼當我運行WHERE xyz < 5其中xyz是一個字符串它仍然會帶回結果。爲什麼或者如何做到這一點,以便如果我搜索「大於」或任何數學運算,比如> < < => =,那麼它只會返回零結果。MySql大於字符串
如果一個字符串是使用數學函數進行搜索,我希望它能夠帶回零結果,並且我很困惑,爲什麼它帶回的結果與「LKJLK」不可能比任何東西都大,因爲它不是一個數字。這不應該返回false。謝謝你的幫助。
我想知道爲什麼當我運行WHERE xyz < 5其中xyz是一個字符串它仍然會帶回結果。爲什麼或者如何做到這一點,以便如果我搜索「大於」或任何數學運算,比如> < < => =,那麼它只會返回零結果。MySql大於字符串
如果一個字符串是使用數學函數進行搜索,我希望它能夠帶回零結果,並且我很困惑,爲什麼它帶回的結果與「LKJLK」不可能比任何東西都大,因爲它不是一個數字。這不應該返回false。謝謝你的幫助。
一個選項是添加額外的WHERE
子句以確保該值是一個數字。例如:
SELECT Data
FROM table
WHERE Data > 10
AND Data REGEXP '^-?[0-9]+$';
這是一個sqlFiddle顯示它的行動。
還有其他方法可以測試值是否爲數字。在SO上搜索會給你更多的方法。
Select
USername
from
users
where username>' '
這將從用戶名中選擇大於5個位置的用戶名。你在找什麼?
當涉及到文本值時,「大於」和「小於」的意思是「在字母后面」和「在字母前面出現」。這在數據庫和幾乎所有的編程語言中都是非常標準的東西。如果你不想比較字符串與那些操作符,那麼也許你不應該比較字符串與那些操作符。不要期望數據庫能夠讀懂你的想法;編寫代碼來做你想做的事,而不是做你不想做的事。如果你的代碼將字符串與數字進行比較,那麼這是糟糕的代碼 – jmcilhinney
感謝您的回覆,這是有道理的。我試圖創建一個全局搜索按鈕,搜索所有的列,但因爲一些列是字符串和一些int。我想生病必須建立一個工作。謝謝。 – user982853
您是否正在創建一個包含MySQL後端的應用程序?您可以將邏輯放入應用程序代碼中,以確保比較始終使用適當的類型。您當然不應該排除對字符串的比較搜索,因爲測試文本列中的值是否小於'5'是相當合理的。 – jmcilhinney