我不喜欢不知道这一点,因为当我需要使用一个而不是另一个时,可能会出现这种情况。它似乎在大多数情况下产生相同的结果,但我猜测他们有微妙的差异,可能与NULL值或者做一些严格的比较,比如PHP中的extra =。!=和<>运算符有什么区别?
由于
我不喜欢不知道这一点,因为当我需要使用一个而不是另一个时,可能会出现这种情况。它似乎在大多数情况下产生相同的结果,但我猜测他们有微妙的差异,可能与NULL值或者做一些严格的比较,比如PHP中的extra =。!=和<>运算符有什么区别?
由于
<>
是标准的SQL操作符,意思是“不等于”。许多数据库(包括postgresql)支持!=
作为<>
的同义词。
它们在postgresql中完全一样。 另请参阅documentation。
不过请注意,PostgreSQL允许你实现自己的类型和 超负荷运营商的类型,所以最终它取决于所涉及什么!=
和<>
操作实际执行数据类型,但<>
和!=
不能做不同的事情。
根据此:http://www.postgresql.org/docs/9.0/static/functions-comparison.html 运算符!=在分析阶段转换为<>。
拥有好奇心,我发现,在转换中/src/backend/parser/scan.l
定义:
/* Convert "!=" operator to "<>" for compatibility */
if (strcmp(yytext, "!=") == 0)
yylval->str = pstrdup("<>");
else
yylval->str = pstrdup(yytext);
return Op;
scan.l
几乎是在分析开始时使用。另外也注意到在Create Operator章:
操作=被映射到输入<>,因此这两个名称总是相等的。
你可以找到pg_operator
表<>
运营商,但并没有什么为!=
:
select * from pg_operator where oprname = '<>';
select * from pg_operator where oprname = '!=';
有很多关于这一主题在此类似question。