当前位置: 首页 > 知识库问答 >
问题:

PostgreSQL自定义运算符比较varchar和integer

通鸿风
2023-03-14

--从offical存储库安装。

--PostgreSQL.conf没有任何变化。

--CentOS版本6.8。

select '10' = 10; 
select '10' = '10'; 
select '10'::character varying = '10'::character varying; 
select '10'::character varying = 'foo bar'; 
select '10'::character varying = 'foo bar'::character varying; 
select 'foo bar' = 'foo bar'; 
select '10'::character varying = '10';

--结果是“运算符不存在:character varieting=integer”

select '10'::character varying = 10; 

因此,我创建了一个自定义运算符来比较字符变化和整数。

1.创建简单函数

CREATE OR REPLACE FUNCTION public.is_equal_char_int(character varying, integer) RETURNS boolean AS 
$BODY$ 
BEGIN 
    IF $1 = $2::character varying THEN
        RETURN TRUE;
    ELSE 
        RETURN FALSE; 
    END IF;
End;
$BODY$ 
LANGUAGE plpgsql VOLATILE COST 100;
CREATE OPERATOR public.=( 
PROCEDURE = is_equal_char_int,
LEFTARG = character varying,
RIGHTARG = integer);
select '10'::character varying = 10;
select '10'::character varying = 'foo bar';

integer的输入语法无效:“foo bar”

select pg_typeof('foo bar');

返回unkown数据类型。

下一步,我创建了一个新的运算符,用于比较字符、变化和unkown数据类型。

CREATE OR REPLACE FUNCTION public.is_equal_char_unknown(character varying, unknown)
RETURNS boolean AS
$BODY$
BEGIN
IF $1 = $2::character varying THEN
    RETURN TRUE;
ELSE
    RETURN FALSE;
END IF;
End;
$BODY$
LANGUAGE plpgsql VOLATILE COST 100;
CREATE OPERATOR public.=( 
PROCEDURE = is_equal_char_unknown,
LEFTARG = character varying,
RIGHTARG = unknown);
select '10'::character varying = 'foo bar';

所以我在一个洞里。

共有1个答案

云欣嘉
2023-03-14

要了解PostgreSQL中运算符的类型解析是如何完成的,请阅读文档中的运算符类型解析规则。

在您的特殊情况下,以下运算符保留在步骤3.a之后:

>

  • 您的自定义运算符(字符变量=integer)。

  •  类似资料:
    • 问题内容: 稍微打错一下就遇到了这个问题(在Python 2.7.5中): 当它,我不小心爆炸了月亮。 我的理解是相当于和表现良好的类(如内置函数),相当于。 如果没有或运算符,那么我认为Python使用。 但是,这些方法都与工作对象,而与运营商 做 的工作。发生这种情况的原因是什么? 问题答案: 但是,当<和>运算符起作用时,这些方法都不能与函数对象一起起作用。发生这种情况的原因是什么? 在任何

    • 概述 比较运算符用于比较两个值的大小,然后返回一个布尔值,表示是否满足指定的条件。 2 > 1 // true 上面代码比较2是否大于1,返回true。 注意,比较运算符可以比较各种类型的值,不仅仅是数值。 JavaScript 一共提供了8个比较运算符。 > 大于运算符 < 小于运算符 <= 小于或等于运算符 >= 大于或等于运算符 == 相等运算符 === 严格相等运算符 != 不相等运算符

    • 自定义运算符 struct Vector2D { var x = 0.0 var y = 0.0 } infix operator +++ extension Vector2D { static func +++ (left: Vector2D, right: Vector2D) -> Vector2D { return Vector2D(x: left

    • 本文向大家介绍Elixir比较运算符,包括了Elixir比较运算符的使用技巧和注意事项,需要的朋友参考一下 示例 平等: 价值平等x == y(1 == 1.0 # true) 价值不平等x == y(1 != 1.0 # false) 严格平等x === y(1 === 1.0 # false) 严格不等式x === y(1 !== 1.0 # true) 比较: x > y x >= y x

    • MongoDB比较运算符用于测试等于或不等于,还有其它更高级的运算符。 在子句中使用比较运算符来确定要选择的记录。以下是可以在MariaDB中使用的比较运算符的列表: 语法及示例 - 编号 比较运算符 描述 示例 1 比较等于 2 比较等于(安全比较值) 3 比较不等于 4 比较不等于 5 比较大于 6 比较大于或等于 7 比较小于 8 比较小于或等于 9 匹配列表中的值 10 否定一个条件 11

    • 主要内容:1) 等于运算(=),2) 安全等于运算符(<=>),3) 不等于运算符(<> 或者 !=),4) 小于等于运算符(<=),5) 小于运算符(<),6) 大于等于运算符(>=),7) 大于运算符(>),8) IS NULL(ISNULL) 和 IS NOT NULL 运算符,9) BETWEEN AND 运算符,总结当使用 SELECT 语句进行查询时, MySQL 允许用户对表达式的左边操作数和右边操作数进行比较,比较结果为真,则返回 1,为假则返回 0,比较结果不确定则返回 NUL

    • 主要内容:== 和 is 的区别比较运算符,也称关系运算符,用于对常量、变量或表达式的结果进行大小比较。如果这种比较是成立的,则返回 True(真),反之则返回 False(假)。 True 和 False 都是 bool 类型,它们专门用来表示一件事情的真假,或者一个表达式是否成立,我们将在《Python bool布尔类型》中详细讲解。 Python 支持的比较运算符如表 1 所示。 表 1 Python 比较运算符汇总 比较

    • 比较运算符用于比较两个表达式的结果。如变量 num 加上变量 offset 是否大于0,大于就是一个比较运算符。 比较运算符还分为相等运算符与关系运算符。 相等运算符: == 相等 != 不相等 === 严格相等 !== 严格不相等 关系运算符: > 大于 >= 大于等于 < 小于 <= 小于等于 运算符返回的都是布尔值。 运算符左右的值也被称为操作数。 1. 相等运算符 相等运算符用于判断运算符