`we_chat_union_id IS NOT NULL` 和 `we_chat_union_id != ‘‘` 这两个条件之间的区别
文章目录
- 1、什么是空字符串?
- 2、两个引号之间加上空格
好的,我们来详细解释一下 we_chat_union_id IS NOT NULL 和 we_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 NULL | we_chat_union_id != '' |
|---|---|---|
| 检查对象 | 列值是否为 NULL | 列值是否为空字符串 ('') |
| 含义 | 值缺失或未知 | 值存在,但内容为空 |
| 是否返回空字符串 | 返回空字符串的记录 | 不返回空字符串的记录 |
| 适用场景 | 过滤掉没有 we_chat_union_id 数据的记录 | 过滤掉 we_chat_union_id 为空字符串的记录 |
举例说明:
假设 user 表中有以下几条记录, we_chat_union_id 列的值分别为:
| id | we_chat_union_id |
|---|---|
| 1 | ‘o12345’ |
| 2 | NULL |
| 3 | ‘’ |
| 4 | ’ ’ |
| 5 | ‘abcdefg’ |
-
SELECT * FROM user WHERE we_chat_union_id IS NOT NULL;- 返回:记录 1, 3, 4, 5 (因为它们的
we_chat_union_id列的值都不是NULL)。
- 返回:记录 1, 3, 4, 5 (因为它们的
-
SELECT * FROM user WHERE we_chat_union_id != '';- 返回:记录 1, 4, 5 (因为它们的
we_chat_union_id列的值都不是空字符串'')
- 返回:记录 1, 4, 5 (因为它们的
-
SELECT * FROM user WHERE we_chat_union_id IS NOT NULL AND we_chat_union_id != '';- 返回:记录 1, 4, 5 (同时满足不为
NULL且不为空字符串)。
- 返回:记录 1, 4, 5 (同时满足不为
总结:
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 = ' ' 的记录。
总结:
两个引号之间没有任何字符才是空字符串。 即使只有一个空格,该字符串也变成了包含空格字符的字符串,不再是空字符串。 在处理字符串的时候,注意区分空字符串和包含空格的字符串,它们有着不同的含义和用途。

相关文章:
`we_chat_union_id IS NOT NULL` 和 `we_chat_union_id != ‘‘` 这两个条件之间的区别
文章目录 1、什么是空字符串?2、两个引号之间加上空格 好的,我们来详细解释一下 we_chat_union_id IS NOT NULL 和 we_chat_union_id ! 这两个条件之间的区别,以及它们在 SQL 查询中的作用: 1. we_chat_union_id IS NOT NULL 含…...
【和春笋一起学C++】文本输入与读取
前言:前面学习了while语句后,下面用while语句实现一个重要的功能,逐字符的读取键盘输入的字符序列,并输出到显示屏上。 准备知识: C的输入输出包含以下3方面的内容: 对系统指定的标准设备的输入和输出。即…...
D类音频应用EMI管理
1、前言 对于EMI,首先需要理解天线。频率和波长之间的关系,如下图所示。 作为有效天线所需的最短长度是λ/4。在空气中,介电常数是1,但是在FR4或玻璃环氧PCB的情况下,介电常数大约4.8。这种效应会导致信号在FR4材…...
第N8周:使用Word2vec实现文本分类
文章目录 一、数据预处理1.加载数据2.构建词典3.生成数据批次和迭代器 二、模型构建1.搭建模型2.初始化模型3.定义训练与评估函数 三、训练模型1.拆分数据集并运行模型 四、总结 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者&a…...
100天精通Python(爬虫篇)——第113天:爬虫基础模块之urllib详细教程大全
文章目录 1. urllib概述2. urllib.request模块 1. urllib.request.urlopen()2. urllib.request.urlretrieve()3. urllib.request.Request()4. urllib.request.install_opener()5. urllib.request.build_opener()6. urllib.request.AbstractBasicAuthHandler7. urllib.request.…...
光谱相机与普通相机的区别
一、成像目的 普通相机:主要目的是记录物体的外观形态,生成人眼可见的、直观的二维图像,重点在于还原物体的形状、颜色和纹理等视觉特征,以供人们进行观赏、记录场景或人物等用途。例如,拍摄旅游风景照片、人物肖像等…...
Mysql数据 新增、修改和删除操作时,这些变化如何被转换为Kafka消息?
Mysql数据 新增、修改和删除操作时,这些变化如何被转换为Kafka消息? 为了在FlinkCDC中配置MySQL同步到Kafka,并采用debezium-json数据格式,我们需要了解当执行新增、修改和删除操作时,这些变化如何被转换为Kafka消息。下面我们将详细介绍这些变化情况,并提供具体的数据样…...
《Python 机器视觉:开启智能视觉新时代》
《Python 机器视觉:开启智能视觉新时代》 一、Python 机器视觉的基石(一)关键库的强大力量(二)环境搭建的便捷路径 二、核心功能与奇妙应用(一)图像的奇幻处理(二)目标检…...
uniapp实现为微信小程序扫一扫的功能
引言 随着微信小程序的快速发展,越来越多的开发者开始关注和学习微信小程序的开发。其中,微信小程序的扫一扫功能是非常常用且实用的功能之一。通过扫描二维码,用户可以获取到相关的信息或者实现特定的功能。 正文 在过去,开发者需要使用微信开发者工具以及相关的开发文档…...
【微信小程序】4plus|搜索框-历史搜索 | 我的咖啡店-综合实训
升级版1-清空全部的再次确认 实现功能: 历史搜索记录展示-历史搜索记录展示10条点击跳转-点击历史搜索记录可同步到搜索框并自动搜索全部删除-可一次性全部删除历史搜索记录全部删除-有再次确认操作展示 进行搜索后留下搜索记录 点击垃圾桶图标,显示【清空全部】 点击【清…...
使用FFmpeg进行拉流和推流操作
FFmpeg是一款强大的多媒体处理工具,可以用于视频的录制、转换、推流和拉流等操作。下面将详细介绍如何使用FFmpeg进行拉流和推流操作。 1. FFmpeg推流操作 推流是将本地的音视频流推送到流媒体服务器上,例如主播将本地电脑上的画面推流到直播平台的流媒…...
Unity微信小游戏接入开放数据域
demo地址:https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/tree/main/Demo/Ranking 官方说明: https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/blob/main/Design/OpenData.md 准备一个Canvas,…...
Spring Boot的开发工具(DevTools)模块中的热更新特性导致的问题
问题: java.lang.ClassCastException: class cn.best.scholarflow.framework.system.domain.entity.SysUser cannot be cast to class cn.best.scholarflow.framework.system.domain.entity.SysUser (cn.best.scholarflow.framework.system.domain.…...
Elasticsearch安装和数据迁移
Elasticsearch安装和数据迁移 Elasticsearch安装 下载并解压Elasticsearch 首先下载Elasticsearch的tar.gz文件,并将其解压: wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.8.2-linux-x86_64.tar.gz tar -xzf elastics…...
Numpy指南:解锁Python多维数组与矩阵运算(下)
文章一览 前言一、排序1.1 numpy.sort1.2 numpy.argsort1.3 numpy.lexsort 二、数组操作2.1 数组元素迭代2.2 数值舍入计算2.3数值取整2.4 数组去重2.5 数组拼接2.6 数组行列交换 三、文件读写3.1 np.fromfile() 读文件3.2 np.loadtxt() 读文件3.3 用 csv 模块逐行处理 CSV 格式…...
路由器刷机TP-Link tp-link-WDR5660 路由器升级宽带速度
何在路由器上设置代理服务器? 如何在路由器上设置代理服务器? 让所有连接到该路由器的设备都能够享受代理服务器的好处是一个不错的选择,特别是当需要访问特定的网站或加速网络连接的时候。下面是一些您可以跟随的步骤,使用路由器…...
VB.NET在 Excel 二次开发中的全面应用
摘要: 本文详细阐述了如何运用VB.NET进行 Excel 的二次开发。首先介绍了开发环境的搭建,包括安装 Visual Studio 及引用 Excel 对象库。接着深入探讨了各种基础操作,如创建 Excel 应用程序对象、打开与操作工作簿、处理工作表与单元格数据等。…...
uni-app使用组件button遇到的问题
在HBuilder X工具中新建一个空白项目, 1、新建一个about页 然后在pages.json文件里加上路由 2、然后看下导航的方法,发现找不到navigateTo方法 参考:button | uni-app官网 第3行和第4行的代码倒是没问题的,第5行的代码有问题执行…...
如何在Express.js中处理异常情况?
在 Express.js 中处理异常情况是确保应用程序稳定性和安全性的重要方面。未处理的错误可能会导致应用崩溃或暴露敏感信息给用户。以下是几种常见的处理异常的方法: 1. 使用 try...catch 和 async/await 对于异步操作,如数据库查询、文件系统访问等&…...
CKA认证 | Day7 K8s存储
第七章 Kubernetes存储 1、数据卷与数据持久卷 为什么需要数据卷? 容器中的文件在磁盘上是临时存放的,这给容器中运行比较重要的应用程序带来一些问题。 问题1:当容器升级或者崩溃时,kubelet会重建容器,容器内文件会…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
