oracle类似isempty,NULLs和empty strings在不同数据库的中特点

1.以oracle为例

SQL> create table test(id int primary key,content varchar(20));

SQL> INSERT INTO test (id, content) VALUES (1, NULL);

SQL> INSERT INTO test (id, content) VALUES (2, '');

SQL> INSERT INTO test (id, content) VALUES (3, ' ');

SQL> INSERT INTO test (id, content) VALUES (4, 'x');

SQL> select * from test;

ID CONTENT

---------- --------------------

1

2

3

4 x

SQL> SELECT ID,CONTENT,

case when content is null then 1 else 0 end as isnull,

case when content = '' then 1 else 0 end as isempty,

case when content = ' ' then 1 else 0 end as blank

from

test;

ID CONTENT ISNULL ISEMPTY BLANK

---------- -------------- ---------- ---------- ----------

1 1 0 0

2 1 0 0

3 0 0 1

4 x 0 0 0

SQL> select id,content,length(content) from test;

ID CONTENT LENGTH(CONTENT)

---------- -------------------- ---------------

1

2

3 1

4 x 1

SQL>

从结果可以看到,empry string被插入表中时,被当做NULL对待。因此,empty strings不会在数据库中存储。 单个空格是不会被转换的,因为不是一个empty string。

2.以mysql为例

>create table test(id int primary key,content varchar(20));

>INSERT INTO test (id, content) VALUES (1, NULL);

>INSERT INTO test (id, content) VALUES (2, '');

>INSERT INTO test (id, content) VALUES (3, ' ');

>INSERT INTO test (id, content) VALUES (4, 'x');

>select * from test;

+----+---------+

| id | content |

+----+---------+

| 1 | NULL |

| 2 | |

| 3 | |

| 4 | x |

+----+---------+

4 rows in set (0.00 sec)

>SELECT ID,CONTENT,

case when content is null then 1 else 0 end as isnull,

case when content = '' then 1 else 0 end as isempty,

case when content = ' ' then 1 else 0 end as blank

from

test;

+----+---------+--------+---------+-------+

| ID | CONTENT | isnull | isempty | blank |

+----+---------+--------+---------+-------+

| 1 | NULL | 1 | 0 | 0 |

| 2 | | 0 | 1 | 1 |

| 3 | | 0 | 1 | 1 |

| 4 | x | 0 | 0 | 0 |

+----+---------+--------+---------+-------+

4 rows in set (0.00 sec)

>select id,content,length(content) from test;

+----+---------+-----------------+

| id | content | length(content) |

+----+---------+-----------------+

| 1 | NULL | NULL |

| 2 | | 0 |

| 3 | | 1 |

| 4 | x | 1 |

+----+---------+-----------------+

可以看到NULL和empty string是不同的。而empty string和空格string被认为是相同的,但是在计算长度的时候却又不同了。

3.以pg为例

postgres=# create table test(id int primary key,content varchar(20));

postgres=# INSERT INTO test (id, content) VALUES (1, NULL);

postgres=# INSERT INTO test (id, content) VALUES (2, '');

postgres=# INSERT INTO test (id, content) VALUES (3, ' ');

postgres=# INSERT INTO test (id, content) VALUES (4, 'x');

postgres=# select * from test;

id | content

----+---------

1 |

2 |

3 |

4 | x

(4 rows)

postgres=# SELECT ID,CONTENT,

case when content is null then 1 else 0 end as isnull,

case when content = '' then 1 else 0 end as isempty,

case when content = ' ' then 1 else 0 end as blank

from test;

id | content | isnull | isempty | blank

----+---------+--------+---------+-------

1 | | 1 | 0 | 0

2 | | 0 | 1 | 0

3 | | 0 | 0 | 1

4 | x | 0 | 0 | 0

(4 rows)

postgres=# select id,content,length(content) from test;

id | content | length

----+---------+--------

1 | |

2 | | 0

3 | | 1

4 | x | 1

(4 rows)

postgres=#

看前两行,NULL被插入后仍被当做NULL,不能当做empty string。从第二行可以看到,插入的empty string没有被当做NULL,仍然是一个empty string。

NULLs和non-NULLs

(1)oracle数据库

SQL> SELECT id, content,

content || NULL AS concatnull,

content || 'x' AS concatchar

FROM test;

ID CONTENT CONCATNULL CONCATCHAR

---------- -------------------- -------------------- ---------------------

1 x

2 x

3 x

4 x x xx

SQL>

在oracle中,NULLs和字符相连接后,输出结果是字符。

(2)mysql数据库

>SELECT id, content,

content || NULL AS concatnull,

content || 'x' AS concatchar

FROM test;

+----+---------+------------+------------+

| id | content | concatnull | concatchar |

+----+---------+------------+------------+

| 1 | NULL | NULL | NULL |

| 2 | | NULL | 0 |

| 3 | | NULL | 0 |

| 4 | x | NULL | 0 |

+----+---------+------------+------------+

mysql中可以用concat拼接多个,但用||无法拼接字符串,会显示零。

>SELECT id, content,

concat(content,NULL) AS concatnull,

concat(content,'x') AS concatchar

FROM test;

+----+---------+------------+------------+

| id | content | concatnull | concatchar |

+----+---------+------------+------------+

| 1 | NULL | NULL | NULL |

| 2 | | NULL | x |

| 3 | | NULL | x |

| 4 | x | NULL | xx |

+----+---------+------------+------------+

NULL和non-NULLS拼接结果是NULL

(3)pg数据库

postgres=# SELECT id, content,

postgres-# content || NULL AS concatnull,

postgres-# content || 'x' AS concatchar

postgres-# FROM test;

id | content | concatnull | concatchar

----+---------+------------+------------

1 | | |

2 | | | x

3 | | | x

4 | x | | xx

(4 rows)

postgres=#

在pg中,NULLs和字符相连接后,NULL出现在任何一个值中都意味着结果是NULL作为输出值,而不管它连接的是什么。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

龙芯.NET正式发布 稳步推进生态建设

2020年12月19日,2020中国. NET开发者大会于苏州开幕。此次大会上,龙芯发布了龙芯.NET 3。龙芯.NET 3基于.NET Core 3.1,支持该版本具备的所有主要功能,包括GC、AOT等。CoreCLR、CoreFX、ASP.NET Core等库的测试通过情况与x64/arm6…

有温度的技术,改善上亿人的生活

06有温度的技术,改善上亿人的生活鱼小皮哥,现在的 APP 真是越来越难用了,功能多、操作复杂、广告更多。唉,可不是么,而且人们的生活已经离不开 APP 了!老百鱼小皮我爷爷最近的视力下降的很快,用…

Linux链接文件包括,Linux操作系统——系统各目录有什么作用、以及文件链接过程...

三、 Linux 系统目录结构/bin — 用来贮存用户命令。目录 /usr/bin 也被用来贮存用户命令。/sbin — 许多系统命令(例如 shutdown)的贮存位置。目录 /usr/sbin 中也包括了许多系统命令。/root — 根用户(超级用户)的主目录。/mnt — 该目录中通常包括系统引导后被挂载的文件系统…

linux脚本传参修改配置文件,shell脚本修改配置文件指定行的值

配置文件内容为Version1ExpireTime300MaxProcessTime15MaxQueueSize2000MaxStatisticsTime1000000StatisticsCount10根据关键字MaxStatisticsTime获取行号,修改对应的value值change_file.sh#!/bin/bashfile_name"config.xml"key_value"MaxStatisticsTime"c…

刚转Java?那准备转回.NET5吧!

再过几天就2021年了,回首今年最大的变化就是.NET5的发布,终结了.NET Framework和.NET Core两个分支。虽然因为新冠疫情原因,原定于.NET5的部分功能被推迟到.NET6了,但.NET5是一个非常非常重要的版本,会载入史册的一个版…

azure linux 多磁盘 lvm,EVE-NG扩展磁盘空间(扩展LVM卷)

环境准备系统环境:EVE-PRO-VM-2.0.4-20前期是使用ova导入安装,精简置备,40G虚拟磁盘容量。空间不足,尝试了很久,记录操作记录如下:血泪教训:操作不当有可能引起数据丢失,需要提前备份…

在 xunit 测试项目中使用依赖注入

在 xunit 测试项目中使用依赖注入Intro之前写过几篇 xunit 依赖注入的文章,今天这篇文章将结合我在 .NET Conf 上的分享,更加系统的分享一下在测试中的应用案例。之所以想分享这个话题是因为我觉得在我们开发过程中测试是非常重要的一部分,高…

linux 端口qos,linux的qos机制 - cgroup篇 (2)

这篇重点讲述cgroup如何控制blkio子系统的qos,首先看下设置blkio.weight blkio.weight_device我的理解是blkio.weight是整个io子系统的权重值,而blkio.weight_device是针对特定的major:minor 设备的权重blkio.throttle.read_bps_device blkio.throttle.w…

利用 C# 中的 FileSystemWatcher 制作一个文件夹监控小工具

利用 C# 中的 FileSystemWatcher 制作一个文件夹监控小工具独立观察员 2020 年 12 月 26 日前一段看到微信公众号 “码农读书” 上发了一篇文章《如何使用 C# 中的 FileSystemWatcher》(翻译自:https://www.infoworld.com/article/3185447/how-to-work-w…

u盘安全删除 linux,为什么要安全删除U盘

原标题:为什么要安全删除U盘移除闪存设备时会对电脑造成危害吗?我们为什么要安全的移除它们?历史上,操作系统将磁盘作为信任对象不需要突然改变状态。当读写文件时,操作系统不希望文件在读写的过程中突然消失。如果文件…

如何在 C# 中使用 投影(Projection)

投影(Projection) 是一种可以将查询结果进行 塑性 的一种操作,你可以使用 投影 将一个 object 转成仅包含你需要属性的新对象,这篇文章中,我们就一起看看如何使用 投影 功能。C# 中的投影 LINQ 集成查询中有两个支持投影的扩展方法&#xff0…

Linux vi 双屏显示,manjaro AwesomeWM 上使用双显示器

安装manjaro时使用独显的单显示器,在主板上接第二个显示器一直没反应。几个问题和解决BIOS里检查是否关闭了集显开关大多数显卡的默认设置都会在识别独显后关闭集显,要使用集显上的接口需要单独设置。如果接口允许,最好将两个显示器都接在独显…

asp.net core中使用cookie身份验证

背景ASP.NET Core Identity 是一个完整的全功能身份验证提供程序,用于创建和维护登录名。 但是, cookie 不能使用基于的身份验证提供程序 ASP.NET Core Identity 。配置在 Startup.ConfigureServices 方法中,创建具有 AddAuthentication 和 A…

Linux语言写的高通滤波,高通滤波器c语言实现

描述高通滤波器,又称低截止滤波器、低阻滤波器,允许高于某一截频的频率通过,而大大衰减较低频率的一种滤波器。它去掉了信号中不必要的低频成分或者说去掉了低频干扰。高通滤波器是一种让某一频率以上的信号分量通过,而对该频率以…

在 WSL Ubuntu 上使用 .NET 进行跨平台开发新手入门

翻译自 haydenb 2020年6月3日的文章《Getting started with cross-platform development using .NET on Ubuntu on WSL》 [1].NET 是一个开源软件框架,用于在 Linux、Windows 和 macOS 上构建跨平台应用程序。WSL 上的 Ubuntu [2]允许您同时为 Ubuntu 和 Windows 构…

linux 全双工 wifi热点,Linux中的同时套接字读/写(“全双工”)(特别是aio)

我正在移植构建在ACE Proactor框架之上的应用程序.该应用程序适用于VxWorks和Windows,但在使用librt的内核2.6.X.X的Linux(CentOS 5.5,WindRiver Linux 1.4和3.0)上无法运行.我把问题缩小到一个非常基本的问题:应用程序在套接字上开始异步(通过aio_read)读取操作,然…

明源云·天际,地产⾏业的Salesforce Lightning Platform

源宝导读:2020年11月6日,明源云在CIO峰会上正式对外发布了“天际开放平台”,这是明源云凝聚其20多年行业经验打造的一款企业级PaaS平台。本文将介绍我们对企业级PaaS平台的行业思考,以及为加速泛地产生态链数字化转型而做的技术创…

c程序设计语言选修难吗,欢迎大家选修C语言程序设计这门课,本帖解释一下一些常见的问题...

置顶欢迎大家选修C语言程序设计这门课,本帖解释一下一些常见的问题叶卡林娜发表于2017年01月05日首先欢迎大家选修浙大翁恺老师的C语言程序设计课程。开课2天就看到讨论区已经有这么多帖子,说明同学们的学习热情很高。结合前几次开课的经验以及目前在讨论…

IdentityServer4系列 | 支持数据持久化

一、前言在前面的篇章介绍中,一些基础配置如API资源、客户端资源等数据以及使用过程中发放的令牌等操作数据,我们都是通过将操作数据和配置数据存储在内存中进行实现的,而在实际开发生产中,我们需要考虑如何处理数据持久化呢&…

c语言修仙受控可看吗,强推三本神奇到爆的小说,c语言修仙,程序员与修真会擦出什么火花...

大家好,我是小龙。今天我给大家推荐三本神奇到爆的小说,c语言修仙,程序员与修真会擦出什么火花!一《c语言修仙》【一十四洲】【简介】: 林浔是一个程序员,通宵编代码后发现自己身体内多了一个程序输入窗口。他尝试编了一个循环程序…