首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

postgres:为什么SELECT NULL <> '‘返回FALSE?

在 PostgreSQL 中,当使用比较运算符(如 <>)比较 NULL 和其他值时,结果通常是 UNKNOWN。但是,当与字符串常量比较时,结果是 FALSE。

在 SQL 中,NULL 代表缺少值或未知值,它与任何其他值(包括空字符串)的比较结果都是未知的。这是因为无法确定未知值与其他值之间的关系。

在 PostgreSQL 中,当你使用 <> 运算符将 NULL 与字符串常量比较时,结果被认为是 FALSE。这是因为在字符串比较中,NULL 被认为是一个空字符串,而与空字符串进行比较的结果是 FALSE。

以下是 SELECT NULL <> '' 的解释:

  • SELECT 表示执行一个查询语句。
  • NULL 是一个特殊的值,代表未知或缺少值。
  • <> 是一个比较运算符,表示不等于。
  • '' 是一个空字符串,表示一个没有字符的字符串。

所以,SELECT NULL <> '' 表示判断 NULL 是否不等于空字符串。根据上述解释,NULL 被认为是一个空字符串,所以这个比较的结果是 FALSE。

总结:

  • 在 PostgreSQL 中,NULL 与任何其他值的比较结果都是未知的。
  • 当使用比较运算符将 NULL 与字符串常量比较时,结果被认为是 FALSE。
  • 所以,SELECT NULL <> '' 的结果是 FALSE。

对于 PostgreSQL 相关产品和介绍链接,我不能提及具体的品牌商,但你可以在腾讯云官方网站的产品页面中查找与 PostgreSQL 相关的云服务产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 奇怪的Java题:为什么128 == 128返回false,而127 == 127会返回为true?

    奇怪的Java题:为什么128 == 128返回false,而127 == 127会返回为true? 在回答这个问题之前,我们先来看看int和Integer的对比,一步步揭开问题的答案。...Integer变量必须实例化后才能使用;int变量不需要; (3) Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ; (4) Integer的默认值是null...Integer i = new Integer(100); Integer j = new Integer(100); System.out.print(i == j); //false 因为new生成的是两个对象...Integer i = new Integer(100); Integer j = 100; System.out.print(i == j); //false 在JDK 5.0之前,你从未见过Integer...= null) { int i = parseInt(integerCacheHighPropValue); i = Math.max(i, 127);

    2.2K31

    为什么 insert 配置 SELECT LAST_INSERT_ID() 返回个0呢?

    今天这个问题主要体现在大家平常用的Mybatis,在插入数据的时候,我们可以把库表索引的返回值通过入参对象返回回来。但是通过我自己手写的Mybatis,每次返回来的都是0,而不是最后插入库表的索引值。...通常只要配置的没问题,返回对象中也有对应的 id 字段,那么就可以正确的拿到返回值了。PS:问题就出现在这里,小傅哥手写的 Mybatis 竟然只难道返回一个0!...重点:bug就发生在这里,为什么呢?...而因为这部分最开始手写 JdbcTransaction 实现 Transaction 接口获取连接的时候,每一次都是新的链接,代码块如下; 这里的链接获取,最开始没有 if null 的判断,每次都是直接获取链接...,所以这种非一个链接下的两条 SQL 操作,所以必然不会获得到正确的结果,相当于只是单独执行 SELECT LAST_INSERT_ID() 所以最终的查询结果为 0 了就!

    93430

    Mybatis查询结果为空时,为什么返回值为NULL或空集合?

    开始前我们先看一个问题: 你是否曾经在学习 Mybatis 的时候跟我有一样的疑问,什么情况下返回 null,什么时候是空集合,为什么会是这种结果?那么你觉得上述这种回答能说服你嘛?...看完这篇你就知道查询结果为空时候为什么集合会是空集合而不是 NULL,而对象为什么会是 NULL 了。 PS:对过程不感兴趣的可以直接跳到最后看结论。...| 多结果集返回 数据库支持同时返回多个 ResultSet 的场景,例如在存储过程中执行多条 Select 语句。...这个可以关注 mybatis 配置中的 returnInstanceForEmptyRow 属性,它默认为 false。 当返回行的所有列都是空时,MyBatis 默认返回 null。...,所以它的返回值为 NULL

    5.3K20

    Aorm又进步了,目前已支持MySQL,MSSQL,Postgres,Sqlite3,并且支持子查询

    ("Alice"), Sex: null.BoolFrom(false), Age: null.IntFrom(18), Type: null.IntFrom...Postgres的特殊性如果你使用MSSQL,Postgres 数据库,需要增加一个Driver操作,以明确的告诉Aorm,这里是MSSQL或者Postgres,Aorm会对sql做一些修改,例如id,...; select ID = convert(bigint, SCOPE_IDENTITY())Alice false 18 0 2022-12-07 10:10:26.1450773 +0800 CST...())这是因为mssql默认情况下,并不会返回最后插入的记录id,只有加上这一句sql,进行一次查询才能得到另外Postgres也有类似的情况,只不过它加的sql代码是returning id支持子查询子查询是非常重要的功能...Select("*"). Where(&Person{Age: null.IntFrom(18)}). GetMany(&listByFiled)if err !

    94810

    PostgreSQL pg_dump 原理探究与备份数据一致性问题和备份注意事项 与 PG MYSQL 到底谁是NO.1

    为什么不能提高自己,两个都会呢?我想那时的你,不会在提出这样问题,因为你有自信,告诉任何人,"Who cares about which one is NO.1?...', '', false); [local] postgres [pg_dump] 2023-12-29 05:49:04.692 UTC [256427] test client backend 00000...pg_catalog.set_config('search_path', '', false); [local] postgres [pg_dump] 2023-12-29 05:49:04.692...: SELECT pg_catalog.set_config('search_path', '', false); statement: SET DATESTYLE = ISO statement: SET...这里有几个问题 1 备份中为什么将备份的过程,转为 RR 模式 2 备份中为什么要给表加 access share 锁 第一个问题 我们截取程序的一段源代码,这段源代码是来自于 /src/bin/

    40210

    postgresql 触发器 简介(转)

    , pl_exec.c:2840 INSERT 0 1 – 插入的值被最后一个before for each row触发器函数的返回值取代, 篡改为2了: postgres=# select...不管是返回NULL还是HeapTuple都无意义, 所以返回NULL就可以了. – after for each row 的触发器函数的返回值也没有意义, 不会造成任何影响....不管是返回NULL还是HeapTuple都无意义, 所以返回NULL就可以了. – 因此有意义的就是before for each row的触发器函数的返回值....– before for each row触发器函数返回NULL将造成跳过该行的操作, 同时跳过后面所有的for each row触发器....=false, ROW_COUNT=0; 视图的instead of for each row触发器函数返回空, 一样, 如果整个SQL的行都跳过处理那么最终的FOUND=false, ROW_COUNT

    3.9K20
    领券