【发布时间】:2014-06-05 12:34:37
【问题描述】:
我不喜欢不知道这一点,因为在某些情况下我需要使用其中一个而不是另一个。似乎在大多数情况下它们产生相同的结果,但我猜测它们有细微的差异,可能与 NULL 值有关,或者像 PHP 中的额外 = 那样进行严格比较。
谢谢
【问题讨论】:
标签: postgresql
我不喜欢不知道这一点,因为在某些情况下我需要使用其中一个而不是另一个。似乎在大多数情况下它们产生相同的结果,但我猜测它们有细微的差异,可能与 NULL 值有关,或者像 PHP 中的额外 = 那样进行严格比较。
谢谢
【问题讨论】:
标签: postgresql
【讨论】:
<> 是标准 SQL 运算符,意思是“不等于”。许多数据库,包括 postgresql,都支持将!= 作为<> 的同义词。
它们在 postgresql 中完全相同。 另请参阅documentation。
请注意,postgresql 允许您实现自己的类型和
这些类型的重载运算符,因此最终取决于涉及的数据类型 != 和 <> 运算符实际上做了什么,但 <> 和 != 永远不会做不同的事情。
【讨论】:
据此:http://www.postgresql.org/docs/current/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 中有很多关于这个主题的内容。
【讨论】: