我在触发器中有这个代码:
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/