`we_chat_union_id IS NOT NULL` 和 `we_chat_union_id != ‘‘` 这两个条件之间的区别

文章目录

  • 1、什么是空字符串?
  • 2、两个引号之间加上空格

好的,我们来详细解释一下 we_chat_union_id IS NOT NULLwe_chat_union_id != '' 这两个条件之间的区别,以及它们在 SQL 查询中的作用:

1. we_chat_union_id IS NOT NULL

  • 含义: 这个条件用于检查 we_chat_union_id 列的值是否为 NULL (空值)。
  • 作用:we_chat_union_id 列的值为 NULL 时,该条件不成立,不返回该行数据。如果 we_chat_union_id 列的值不是 NULL(即该列存在一个值,不管是什么内容),该条件成立,返回该行数据。
  • 适用场景:
    • 当你不希望包含 we_chat_union_id 列值为 NULL 的记录时,使用此条件。
    • NULL 通常表示该字段的值缺失或未知。

2. we_chat_union_id != ''

  • 含义: 这个条件用于检查 we_chat_union_id 列的值是否为空字符串 ('')。
  • 作用:we_chat_union_id 列的值为空字符串 '' 时,该条件不成立,不返回该行数据。如果 we_chat_union_id 列的值不是空字符串 (例如,包含任何字符,即使是空格),该条件成立,返回该行数据。
  • 适用场景:
    • 当你不希望包含 we_chat_union_id 列值为空字符串的记录时,使用此条件。
    • 空字符串表示该字段存在,但是内容为空。

核心区别:

特性we_chat_union_id IS NOT NULLwe_chat_union_id != ''
检查对象列值是否为 NULL列值是否为空字符串 ('')
含义值缺失或未知值存在,但内容为空
是否返回空字符串返回空字符串的记录不返回空字符串的记录
适用场景过滤掉没有 we_chat_union_id 数据的记录过滤掉 we_chat_union_id 为空字符串的记录

举例说明:

假设 user 表中有以下几条记录, we_chat_union_id 列的值分别为:

idwe_chat_union_id
1‘o12345’
2NULL
3‘’
4’ ’
5‘abcdefg’
  • SELECT * FROM user WHERE we_chat_union_id IS NOT NULL;

    • 返回:记录 1, 3, 4, 5 (因为它们的 we_chat_union_id 列的值都不是 NULL)。
  • SELECT * FROM user WHERE we_chat_union_id != '';

    • 返回:记录 1, 4, 5 (因为它们的 we_chat_union_id 列的值都不是空字符串 '')
  • SELECT * FROM user WHERE we_chat_union_id IS NOT NULL AND we_chat_union_id != '';

    • 返回:记录 1, 4, 5 (同时满足不为 NULL 且不为空字符串)。

总结:

  • IS NOT NULL 用来判断一个字段的值是否为 NULL
  • != '' 用来判断一个字符串字段的值是否为空字符串(长度为0的字符串)。

we_chat_union_id 这种字符串类型的列中,既有可能出现 NULL,也有可能出现空字符串 '',所以在很多情况下需要同时使用这两个条件来过滤掉无效数据。 如果只是判断是否不为 NULL,那么即使字段值是空字符串 '',记录仍然会被返回。

1、什么是空字符串?

好的,我们来详细解释一下什么是空字符串:

空字符串的定义:

空字符串(Empty String)是指长度为零的字符串,即不包含任何字符的字符串。 换句话说,它是一个没有字符的序列。

表示方法:

在编程语言和数据库中,空字符串通常使用以下方式表示:

  • 两个双引号 “”: 例如,在 JavaScript, Java, C++, Python 等许多编程语言中,都使用 "" 来表示空字符串。
  • 两个单引号 ‘’: 例如,在 Python, JavaScript, SQL 等语言中,可以使用 '' 来表示空字符串。
  • 在一些特定的环境中: 也可能使用 String.Empty 或类似的表示方法,但这本质上还是代表一个不包含任何字符的字符串。

特性:

  • 长度为零: 空字符串的长度为 0。
  • 没有字符: 它不包含任何字符(包括空格、制表符、换行符等)。
  • 是一个字符串: 空字符串仍然是一种字符串类型,而不是 NULL 或其他数据类型。
  • 可操作: 尽管它没有字符,但你可以对空字符串进行一些字符串操作,例如连接、比较等。

示例:

  • 在 JavaScript 中:

    let emptyString = "";
    console.log(emptyString.length); // 输出: 0
    
  • 在 Python 中:

    empty_string = ''
    print(len(empty_string))  # 输出: 0
    
  • 在 SQL 中:

    SELECT * FROM users WHERE username = '';
    

使用场景:

  • 初始化字符串变量: 将字符串变量初始化为一个空字符串,表示它当前不包含任何值。
  • 检查输入: 检查用户输入的字符串是否为空。
  • 字符串拼接: 拼接字符串时,初始时可以使用空字符串作为起始值。
  • 字符串操作: 作为字符串操作的默认值,例如替换或删除操作。
  • 数据库查询: 在数据库查询中,可以用来查找某个字符串字段值为空的记录。

与 NULL 的区别:

空字符串 (""'') 和 NULL 是不同的概念:

  • 空字符串 是一个字符串类型的值,表示该字段存在,但内容为空。
  • NULL 表示该字段没有值,缺失或未知。

总结:

空字符串是一个长度为零、不包含任何字符的字符串。它是一种字符串类型的值,不是 NULL,也不等于数字 0。空字符串在编程和数据库中有着广泛的应用,例如表示字符串变量的初始状态,检查用户输入,进行字符串操作等。

2、两个引号之间加上空格

不,两个引号之间加上空格,就不再属于空字符串了。它变成了包含一个空格字符的字符串。

空字符串 vs. 包含空格的字符串

  • 空字符串 (""''):
    • 长度为 0。
    • 不包含任何字符。
    • 表示一个没有任何内容的字符串。
  • 包含空格的字符串 (" "' '):
    • 长度为 1 (因为空格字符本身也占一个长度)。
    • 包含一个空格字符。
    • 表示一个包含空格字符的字符串。

区别的关键在于长度和包含的字符:

  • 长度: 空字符串的长度是 0,而包含空格的字符串的长度是 1 或更多 (取决于空格的个数)。
  • 包含的字符: 空字符串不包含任何字符,而包含空格的字符串包含至少一个空格字符。

代码示例(以 Python 为例):

empty_string = ""
space_string = " "print(f"空字符串的长度: {len(empty_string)}")  # 输出: 空字符串的长度: 0
print(f"包含空格的字符串的长度: {len(space_string)}")  # 输出: 包含空格的字符串的长度: 1print(empty_string == "") # True,空字符串等于空字符串
print(space_string == "") # False,包含空格的字符串不等于空字符串print(empty_string == " ") # False,空字符串不等于包含空格的字符串
print(space_string == " ") # True,  包含空格的字符串等于包含空格的字符串

数据库中的影响:

在数据库查询中,""'' 表示空字符串,而 " "' ' 表示包含空格的字符串。它们是不同的值,所以查询条件 column = '' 不会匹配 column = ' ' 的记录。

总结:

两个引号之间没有任何字符才是空字符串。 即使只有一个空格,该字符串也变成了包含空格字符的字符串,不再是空字符串。 在处理字符串的时候,注意区分空字符串和包含空格的字符串,它们有着不同的含义和用途。

在这里插入图片描述

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

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

相关文章

elementUI——upload限制图片或者文件只能上传一个——公开版

最近在写后台管理系统时,遇到一个需求,就是上传图片,有且仅能上传一张。 效果图如下: 功能描述:上传图片时,仅支持单选,如果上传图片成功后,展示图片,并隐藏添加图片的…

【RabbitMQ高级篇】消息可靠性问题(1)

目录 1.消息可靠性 1.1.生产者消息确认 1.1.1.修改配置 1.1.2.定义Return回调 1.1.3.定义ConfirmCallback 1.2.消息持久化 1.2.1.交换机持久化 1.2.2.队列持久化 1.2.3.消息持久化 1.3.消费者消息确认 1.3.1.演示none模式 1.3.2.演示auto模式 1.4.消费失败重试机制…

MyBatis知识点笔记

目录 mybatis mapper-locations的作用? mybatis configuration log-impl 作用? resultType和resultMap的区别? 参数 useGeneratedKeys ,keyColumn,keyProperty作用和用法 取值方式#和$区别 动态标签有哪些 MyBat…

Vue3 使用OCR识别图片文字

Tesseract.js 是一个javascript库&#xff0c;可以从图像中获取几乎任何语言的单词&#xff0c;支持文本转pdf功能&#xff0c;精准度很高。 1. 安装 npm install tesseract.js 2. 示例代码&#xff08;vue3版&#xff09; <template><div class"container&qu…

【多维DP】力扣3366. 最小数组和

给你一个整数数组 nums 和三个整数 k、op1 和 op2。 你可以对 nums 执行以下操作&#xff1a; 操作 1&#xff1a;选择一个下标 i&#xff0c;将 nums[i] 除以 2&#xff0c;并 向上取整 到最接近的整数。你最多可以执行此操作 op1 次&#xff0c;并且每个下标最多只能执行一…

python+PyMuPDF库:(一)创建pdf文件及内容读取和写入

目录 文档操作 打开文档 获取文档信息 删除页 复制页 移动页 选择重构合并 保存关闭 页对象操作 内容读取 获取页对象的字体样式 插入文本标签 插入文本内容 字体设置 insert_text添加文本 insert_textbox添加文本 插入图片 获取页面注释、链接、表单字段 …

python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶

【1】引言 前序已经掌握了使用cv2.circle()绘制圆形的基本操作&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;二十&#xff09;使用cv2.circle()绘制圆形-CSDN博客 由于圆形本身绘制起来比较简单&#xff0c;因此可以自由操作的空间也就大&#x…

音视频入门基础:MPEG2-PS专题(2)——使用FFmpeg命令生成ps文件

通过FFmpeg命令可以将mp4文件转换为ps文件。由于ps文件对应的FFInputFormat结构为&#xff1a; const FFInputFormat ff_mpegps_demuxer {.p.name "mpeg",.p.long_name NULL_IF_CONFIG_SMALL("MPEG-PS (MPEG-2 Program Stream)"),.p.flags …

xshell基础设置

一.查看->勾选会话管理器和快速命令栏 二.工具->选项->终端 三.工具->选项->高级 四.文件->默认会话属性->外观&#xff08;看个人喜好&#xff09;

【GlobalMapper精品教程】091:根据指定字段融合图斑(字段值相同融合到一起)

文章目录 一、加载数据二、符号化三、融合图斑1. 根据图斑位置进行融合2. 根据指定字段四、注意事项一、加载数据 订阅专栏后,从私信中查收配套实验数据包,找到data091.rar,解压并加载,如下图所示: 属性表如下: 二、符号化 为了便于比对不同的融合结果,查看属性表根据…

大语言模型(LLM)中大数据的压缩存储及其重要性

在大型语言模型&#xff08;LLM&#xff09;中&#xff0c;KV Cache&#xff08;键值缓存&#xff09;的压缩方法及其重要性。 为什么要压缩KV Cache&#xff1f; 计算效率&#xff1a;在生成文本的过程中&#xff0c;每个生成的token都需要与之前所有的token的键值&#xff…

Springboot关于格式化记录

日期格式化 返回前端日期需要格式化 <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.2</version> </dependency>JsonFormat(pattern "yyyy-MM-dd…

条款19 对共享资源使用std::shared_ptr

目录 一、std::shared_ptr 二、std::shared_ptr性能问题 三、control block的生成时机 四、std::shared_ptr可能存在的问题 五、使用this指针作为std::shared_ptr构造函数实参 六、std::shared_ptr不支持数组 一、std::shared_ptr<T> shared_ptr的内存模型如下图&…

Linux第99步_Linux之点亮LCD

主要学习如何在Linux开发板点亮屏&#xff0c;以及modetest命令的实现。 很多人踩坑&#xff0c;我也是一样。关键是踩坑后还是实现不了&#xff0c;这样的人确实很多&#xff0c;从群里可以知道。也许其他人没有遇到这个问题&#xff0c;我想是他运气好。 1、修改设备树 1)、…

攻破 kioprix level 4 靶机

又又又来了... 法一、 基本步骤 1.确认主机ip&#xff0c;扫描端口确定服务和版本 2.访问网站&#xff0c;扫描目录&#xff0c;查找敏感信息 3.利用敏感信息和SQL注入进入网站 4.ssh服务连接主机 5.shell逃逸并查找敏感信息&#xff08;与数据库等相关&#xff09; 6.m…

Qt自定义步骤引导按钮

1. 步骤引导按钮 实际在开发项目过程中&#xff0c;由一些流程比较繁琐&#xff0c;为了给客户更好的交互体验&#xff0c;往往需要使用step1->step2这种引导对话框或者引导按钮来引导用户一步步进行设置&#xff1b;话不多说&#xff0c;先上效果 2. 实现原理 实现起来…

解决nuxt3下载慢下载报错问题

在下载nuxt3时总是下不下来&#xff0c;最后还报错了。即使改成国内镜像源也不行。 解决方法&#xff1a; 直接去github上下载 https://github.com/nuxt/starter/tree/v3 解压后得到如下目录&#xff1a; 手动修改项目名和文件夹名 安装依赖 npm install可能会比较慢或下不…

ShenNiusModularity项目源码学习(6:访问控制)

ShenNius.Admin.API项目中的控制器类的函数如果需要访问控制&#xff0c;主要是调用ShenNius.Infrastructure项目下的AuthorityAttribute特性类实现的。AuthorityAttribute继承自ActionFilterAttribute抽象类&#xff0c;后者用于在调用控制器操作函数前后自定义处理逻辑&#…

【连续学习之SSL算法】2018年论文Selfless sequential learning

1 介绍 年份&#xff1a;2018 期刊&#xff1a; arXiv preprint Aljundi R, Rohrbach M, Tuytelaars T. Selfless sequential learning[J]. arXiv preprint arXiv:1806.05421, 2018. 本文提出了一种名为SLNID&#xff08;Sparse coding through Local Neural Inhibition and…

《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》学习笔记——HarmonyOS技术理念

1.2 技术理念 在万物智联时代重要机遇期&#xff0c;HarmonyOS结合移动生态发展的趋势&#xff0c;提出了三大技术理念&#xff08;如下图3-1所示&#xff09;&#xff1a;一次开发&#xff0c;多端部署&#xff1b;可分可合&#xff0c;自由流转&#xff1b;统一生态&#xf…