【问题标题】:What is the difference between != and <> operators?!= 和 <> 运算符有什么区别?
【发布时间】:2014-06-05 12:34:37
【问题描述】:

我不喜欢不知道这一点,因为在某些情况下我需要使用其中一个而不是另一个。似乎在大多数情况下它们产生相同的结果,但我猜测它们有细微的差异,可能与 NULL 值有关,或者像 PHP 中的额外 = 那样进行严格比较。

谢谢

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    来自manual

    注意:!= 运算符在解析器阶段转换为 。无法实现执行不同操作的 != 和 运算符。

    所以不,两者没有区别。

    【讨论】:

      【解决方案2】:

      &lt;&gt; 是标准 SQL 运算符,意思是“不等于”。许多数据库,包括 postgresql,都支持将!= 作为&lt;&gt; 的同义词。

      它们在 postgresql 中完全相同。 另请参阅documentation

      请注意,postgresql 允许您实现自己的类型和 这些类型的重载运算符,因此最终取决于涉及的数据类型 !=&lt;&gt; 运算符实际上做了什么,但 &lt;&gt;!= 永远不会做不同的事情。

      【讨论】:

        【解决方案3】:

        据此:http://www.postgresql.org/docs/current/static/functions-comparison.html 运算符!= 在解析阶段被转换为&lt;&gt;

        【讨论】:

          【解决方案4】:

          好奇我发现转换是在/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 表中可以找到&lt;&gt; 运算符,但!= 没有:

          select * from pg_operator where oprname = '<>';
          select * from pg_operator where oprname = '!=';
          

          在这个类似的question 中有很多关于这个主题的内容。

          【讨论】:

            猜你喜欢
            • 2022-06-10
            • 2018-08-16
            • 2012-10-10
            • 1970-01-01
            • 2010-11-15
            • 2011-02-12
            • 2021-04-19
            • 2023-03-15
            • 1970-01-01
            相关资源
            最近更新 更多