首页 > 解决方案 > 当记录不包含任何内容,甚至没有一个空格时,拥有有效记录意味着什么

问题描述

我正在浏览特定列的数据,该列看起来像是有空格,因为它没有说null

在试图找到它是什么时,我发现数据没有一个空格,但它也不是空白的。

之后怎么样了?-- 两个单引号 '' 之间的东西不是空格。

尝试运行此查询但没有结果:

select column1 from table1 where column1 like '% %' 
-- Single space

->No records found

我尝试的第二个查询(见下文)没有提到空格。结果表明存在类似 -> 的记录''

select column1 from table1 where column1 like '% %'

select column1 from table1 where column1= ''

我试图理解那条记录是什么,什么都不是?

标签: sqlpostgresqldata-analysis

解决方案


之后怎么样了?-- 两个单引号 '' 之间的东西不是空格。

这是一个长度为零的字符串。你是对的,它不是一个空格 - 一个空格是' '- 它的长度为一个字符。长度为 0 的字符串与长度为 1 的字符串完全不同,无论字符串中包含什么字符。

在任何计算机系统中,我们都可以任意决定一切的含义。假设您有一个问题的答案是 A、B 或 C。您可能还会遇到此人不知道或知道但不想说的情况。除了所有用字母回答的人之外,您可能任意决定让 NULL 表示“不知道”,将长度为 0 的字符串表示为“不想说”

这是一个随意的决定,也许您决定为“不想说”存储一个空格,也许是一个感叹号 - 随便什么。一些数据库供应商认为提供对长度为零的字符串的支持很重要,而其他(oracle)则没有(oracle 将 null 和 '' 视为相同)

最终,如果您的数据库支持零长度字符串,您必须了解它们是什么,并且在您的应用程序的上下文中,您必须了解它们的含义。它们就像一杯没有水的杯子,或者一袋没有糖果的糖果。“没有数据”的说法不同于“我们不知道有没有数据” " - 这里的不确定性通常与 NULL 相关联

我试图理解那条记录是什么,什么都不是?

该记录是该列中长度为零的字符串的记录。但是,我们无法告诉您这意味着什么,因为在其中存储零长度字符串的决定是由您或您公司的其他开发人员之一或之前退出的开发人员做出的。可能是他想记录空数据和零数据之间的差异。可能是他懒得检查数据是否为空,并希望避免前端应用程序发生典型的空引用崩溃。可能是他想统计数据,即使没有数据可以放在那里

我们无法回答您的这部分问题

我们只能告诉你零长度字符串是可能的,你可以给它们附加任何其他字符串一样多的含义,它们永远不会等于非零长度的字符串,所以like '% %'永远找不到它们。不要假设你看不到的东西一定是空格。


推荐阅读