news 2026/4/7 22:47:34

‘=’特殊运算符和‘-’关联报错

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
‘=’特殊运算符和‘-’关联报错

文章目录

  • 环境
  • 症状
  • 问题原因
  • 解决方案
  • 报错编码

环境

系统平台:N/A
版本:4.7.7,4.3.4

症状

highgo=# SELECT * FROM TEST WHERE id !=-1;ERROR:42883: operator doesnotexist:integer!=-integerLINE1:SELECT*FROMTESTWHEREid!=-1;^HINT:Nooperator matches the given nameandargumenttype(s).You might needtoaddexplicittypecasts.

在SQL语句中‘=’和‘-’之前有特殊运算符(例如!)会报错“操作符不存在”。

问题原因

HGDB中并没有=-这个操作符,刚才的2 =- 3会被解析成2 = (-3)。HGDB的词法分析器,会把=-拆分成=和-两个操作符,但如果=-前面还有~!@#^&|`?%中的任一字符,则不拆分,当做一个整体。所以会报告找不到 !=- 这个操作符。

此外可以通过如下几个步骤验证一下:

highgo=# CREATE table TEST ( id serial primary key, dou_num numeric );

日志: 00000: 语句: CREATE table TEST ( id serial primary key, dou_num numeric );

CREATETABLEhighgo=# INSERT INTO TEST(DOU_NUM) VALUES(1),(-1);INSERT02highgo=# select * from test;id|dou_num----+---------1|12|-1(2rows)highgo=#highgo=# SELECT * FROM TEST WHERE DOU_NUM !=1;id|dou_num----+---------2|-1(1row)highgo=# SELECT * FROM TEST WHERE DOU_NUM !=-1;

错误: 42883: 操作符不存在: numeric !=- integer 第 34 个字符处

提示: 没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.

语句: SELECT * FROM TEST WHERE DOU_NUM !=-1;

错误: 42883: 操作符不存在: numeric !=- integer

LINE 1: SELECT * FROM TEST WHERE DOU_NUM !=-1;

^

HINT: 没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.

highgo=# SELECT * FROM TEST WHERE DOU_NUM !=1;id|dou_num----+---------2|-1(1row)highgo=# SELECT * FROM TEST WHERE DOU_NUM !=-1;

错误: 42883: 操作符不存在: numeric !=- integer 第 34 个字符处

提示: 没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.

语句: SELECT * FROM TEST WHERE DOU_NUM !=-1;

错误: 42883: 操作符不存在: numeric !=- integer

LINE 1: SELECT * FROM TEST WHERE DOU_NUM !=-1;

^

HINT: 没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换.

highgo=# SELECT * FROM TEST WHERE DOU_NUM !='-1';id|dou_num----+---------1|1(1row)highgo=# SELECT * FROM TEST WHERE DOU_NUM =-1;id|dou_num----+---------2|-1(1row)highgo=# SELECT * FROM TEST WHERE DOU_NUM !=0-1;id|dou_num----+---------1|1(1row)

解决方案

方案一:如遇到不等于情况时,建议使用<>,上述问题可做如下更改:SELECT * FROM TEST WHERE id <>-1;

方案二:在‘=’和‘-’之前有特殊运算符(例如!)时,‘-’前面添加空格(部分应用可能存在不识别空格的现象),上述问题可做如下更改:SELECT * FROM TEST WHERE id != -1;

方案三:写成‘0+*’格式(*可为负数)即可避免词法分析器的检查,上述问题可做如下更改:SELECT * FROM TEST WHERE id !=0±1;

我们建议优先使用方案一。

报错编码

42883

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/31 16:55:07

利用SSD1306中文手册优化智能手表启动画面流程

从“能亮”到“惊艳”&#xff1a;用SSD1306中文手册重构智能手表启动体验你有没有过这样的经历&#xff1f;按下智能手表的电源键&#xff0c;等了快一秒&#xff0c;屏幕才突然“啪”地一下全亮&#xff0c;Logo毫无预兆地跳出来——没有过渡、没有呼吸感&#xff0c;仿佛系统…

作者头像 李华
网站建设 2026/4/3 19:16:56

基于TP4056锂电池充电管理芯片和P沟道MOS管搭建的锂电池充电+放电防反接/外部供电自动切换的电路

电路采用TP4056芯片设计的一款单节锂电池充放电一体电路。电路在外部电源存在时&#xff0c;优先使用外部电源供电并为电池充电&#xff0c;外部电源消失后自动切换至锂电池供电。电路是基于TP4056锂电池充电管理芯片和AO3401P沟道MOS管搭建的锂电池充电放电防反接/路径管理电路…

作者头像 李华
网站建设 2026/4/4 6:10:19

痛点拆解+方案落地:工业人形机器人的咨询全流程

在工业人形机器人的咨询全流程中&#xff0c;内容概要概括了整个文章的主旨与结构。本文首先分析了行业内面临的痛点&#xff0c;探讨技术难题和市场需求的多样性&#xff0c;接着详细介绍如何评估企业的需求与市场潜力。这一过程关键在于了解不同应用场景下人形机器人的技术适…

作者头像 李华
网站建设 2026/3/31 19:55:40

数据驱动+价值升级:B2B人形机器人品牌的咨询核心

本篇文章将深入探讨人形机器人在B2B市场中的应用&#xff0c;特别是如何通过数据驱动的策略实现品牌的价值升级。在人形机器人行业&#xff0c;数据分析已成为优化产品设计和提升客户体验的核心手段。通过对市场趋势和客户反馈的数据解析&#xff0c;企业能够灵活调整其产品&am…

作者头像 李华
网站建设 2026/3/27 2:26:59

把 ADT 变成你的自动化工坊:ABAP IDE Actions 入门与实践指南

在很多团队里,ABAP 开发效率的瓶颈并不在写代码本身,而在一堆反复出现的动作:创建同样结构的对象、补齐同样的注解、检查同样的命名规则、把同样的调试信息串起来、跑同样的质量门禁。久而久之,大家的注意力被琐碎操作切碎,真正该花时间思考的业务建模和架构治理反而被挤压…

作者头像 李华
网站建设 2026/4/1 5:07:18

把 ASSIGN 用到骨子里:ABAP 字段符号的动态处理、映射陷阱与新语法

在 ABAP 日常开发里,只要你写过通用框架、做过动态字段赋值、处理过不固定结构的入参,就一定绕不开 FIELD-SYMBOLS 和 ASSIGN。它们看起来像是“老语法”,但在新版本语义补齐之后,反而更适合做可靠的泛化处理:既能少写重复代码,又能把动态编程的风险控制在可预期范围内。…

作者头像 李华