2014-06-05 44 views
0

我不喜欢不知道这一点,因为当我需要使用一个而不是另一个时,可能会出现这种情况。它似乎在大多数情况下产生相同的结果,但我猜测他们有微妙的差异,可能与NULL值或者做一些严格的比较,比如PHP中的extra =。!=和<>运算符有什么区别?

由于

回答

4

manual

注:!=运算符在分析器阶段转换为<>。不可能实现做不同事情的!=和<>操作符。

所以不,两者没有区别。

2

<>是标准的SQL操作符,意思是“不等于”。许多数据库(包括postgresql)支持!=作为<>的同义词。

它们在postgresql中完全一样。 另请参阅documentation

不过请注意,PostgreSQL允许你实现自己的类型和 超负荷运营商的类型,所以最终它取决于所涉及什么!=<>操作实际执行数据类型,但<>!=不能做不同的事情。

0

拥有好奇心,我发现,在转换中/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

相关问题