2014-02-23 25 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个位置的用户名。你在找什么?