MySQL Single Dash使用而不是等号

时间:2014-08-15 15:12:37

标签: mysql database syntax

我只是想知道是否有人知道它们之间的区别:

select * from database.user_table WHERE user_id-'user';

select * from database.user_table WHERE user_id ='user';

两者似乎都有效,但是,它们会返回不同的结果。

谢谢!

1 个答案:

答案 0 :(得分:6)

这取决于user_id的类型。假设它是一个字符串,那么:

WHERE user_id = 'user'

将返回user_id为字符串'user'的行(或者可能使用大写字母,具体取决于数据库和列的排序规则)。

当你这样做时:

WHERE user_id - 'user'

然后发生了两件事。如果表达式的计算结果为0或(NULL),则该行将被过滤掉。这相当于WHERE user_id - 'user' <> 0

-是一个数字运算符,因此两个值都转换为数字。 MySQL使用静默转换方法,其中转换前导“数字”。因此,'user'将转换为0(无前导数字或数字类型字符)。 'user_id'也将被转换。在这种情况下,基本上以数字开头的任何user_id都将通过测试(以及以小数点开头的大多数)。

如果user_id是整数,则user_id = 'user_id'user_id = 0相同。 user_id - 'user'user_id <> 0相同。