【PostgreSQL】SQL中不等于号判断失效的判断和解决方法

3,386 阅读2分钟

「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战

最近在项目sql中频频使用到了不等于的判断条件,试了很多个不等于的运算符,都没有办法解决问题。

一、尝试使用多个不同的运算符进行判断

在网上搜索资料得出:

  1. <>

    按照资料来看,<>属于早期的SQL不等于符号,推荐使用。

  2. ! =

    =! =是用来判断具体的值,无法判断NULL值。

  3. is not

    is 和 is not可以用来判断NULL值。

某些资料指出:

  • 用PostgreSQL操作符不等于<>时,还必须加上OR the_column IS NULL

    select column1,column2,column3... 
    	from table_name 
     where column4 <> '1' or column4 IS NULL
    
  • 单纯的不等于可以用!=或者<>表示,但是查询字段不等于的情况时候,需要加上字段不为空

二、问题的源头

在我一直尝试的时候,出现了一条错误提醒了我问题的源头在什么地方,具体不太记得了,提示的大概意思是:不能拿BigInt与Integer进行比较。

因此,如果遇到pgsql的不等于或等于的问题,可以先将两边的变量类型转换为一致的类型再进行对比,不同类型的数据始终是不同的,即不等于的表达式永远不会等于true。

偶尔可以判断到sql中的一些不等于带来的错误,可能是因为两者类型就是不一致的所以导致无法判断,可以将两边的数值强制转换成一致的类型再进行比较,或者是调查一下这段sql字段是从哪些表取得的,查看表结构也可得。

三、判断字段类型的函数

用ISNUMERIC函数可以确定表达式是否为一个有效的数字类型。

  • 语法为:ISNUMERIC ( expression )
  • 参数:expression
  • 返回类型:int
  • 解释:当输入表达式得数为一个有效的整数、浮点数、decimal类型,那么ISNUMERIC返回1,否则返回0,返回1可确保expresssion转换为上述数字类型中的一种。