我在触发器中有这个代码:

CREATE TRIGGER customernametrig
  AFTER UPDATE
  ON customers
  FOR EACH ROW
  EXECUTE PROCEDURE  trig();

以及功能:
CREATE OR REPLACE FUNCTION trig()
  RETURNS trigger AS
$BODY$
begin
   if TG_OP='UPDATE' then
    RAISE NOTICE '%', new.customername;
    RAISE NOTICE '%', old.customername;
    RAISE NOTICE '%', new.customername<>old.customername;
    if new.customername<>old.customername then
        RAISE NOTICE 'hi';
    end if;
  end if;
end;
$BODY$
  LANGUAGE plpgsql VOLATILE

customername列是citext类型。
当我运行update命令时
Update customers set customername='Jack' where customerid=125;

打印字段:
NOTICE:  Jack
NOTICE:  jack
NOTICE:  f

但是如果我运行select 'jack'<>'Jack'它会给我:t
所以我希望它能打印出来:
NOTICE:  Jack
NOTICE:  jack
NOTICE:  t
NOTICE:  hi

我不理解这种行为。这里发生了什么事?

最佳答案

https://www.postgresql.org/docs/current/static/citext.html
citext模块提供不区分大小写的字符串类型
...
citext通过将每个字符串转换为小写来执行比较
(好像调用了lower)然后正常地比较结果。
因此,例如,如果lower would
为他们产生相同的结果。

t=# select 'jack'<>'Jack';
 ?column?
----------
 t
(1 row)

t=# select 'jack'::citext<>'Jack';
 ?column?
----------
 f
(1 row)

关于sql - PostgreSQL 9.3运算符<>没有给出逻辑结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45441840/

10-12 22:21