news 2026/4/18 9:44:16

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

作者头像

张小明

前端开发工程师

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/4/17 17:32:35

C盘瘦身最简单的方法,小白也能轻松上手

如果你发现你的C盘空间越来越少&#xff0c;那么你可能需要对其进行瘦身。在本文中&#xff0c;我们将分享一些最简单有效的方法&#xff0c;来帮助你解决这个问题。1. 移动用户文件夹Windows默认会将用户文件夹&#xff08;如“文档”、“图片”、“音乐”等&#xff09;存储在…

作者头像 李华
网站建设 2026/4/17 16:12:22

把信息找全、找准、找快:在 Eclipse 里用 ADT 提升 ABAP 开发效率的一套方法

在真实项目里,写代码本身往往不是最耗时的部分。更消耗注意力的,常常是找信息:这个字段到底什么类型、长度多少、有没有文档注释;这个接口有哪些实现类;我准备改一个数据元素,会影响到哪些类和 CDS;这段逻辑到底依赖了多少标准对象,迁移到另一个系统会不会踩雷。ADT(A…

作者头像 李华
网站建设 2026/4/17 13:55:03

MCP数据加密认证实战指南(从入门到合规的完整路径)

第一章&#xff1a;MCP数据加密认证概述在现代信息系统的安全架构中&#xff0c;MCP&#xff08;Message Confidentiality Protocol&#xff09;数据加密认证机制扮演着关键角色。该协议旨在保障数据在传输过程中的机密性、完整性和身份可验证性&#xff0c;广泛应用于金融交易…

作者头像 李华
网站建设 2026/4/17 20:40:38

中医药科研应向何处发力——来自“国自然”项目数据的启示

“科技创新是中医药传承创新发展的重要基点&#xff0c;为中医药医疗、保健、教育、产业和国际合作提供基础性支撑。说清楚、讲明白中医药学原理需要以科技创新为支撑&#xff0c;中医药发挥优势作用和临床疗效需要科技创新作保障&#xff0c;中医药新质生产力发展需要科技创新…

作者头像 李华
网站建设 2026/4/18 9:21:32

AI自动生成2025音乐源JSON:开发者的新利器

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 使用AI生成符合2025音乐源标准的JSON数据结构。要求包含歌曲名称、艺术家、专辑、时长、流派、发行年份、BPM、音频URL等字段。JSON结构要规范&#xff0c;支持嵌套对象和数组。自…

作者头像 李华