标签: null

SQL Server 不能将 NULL 存储在固定长度的列中吗?

我在Oracle 官方文档中看到了这个声明:

在 Microsoft SQL Server 中,只有具有可变长度数据类型的列才能存储 NULL 值。当您创建一个允许 NULL 具有固定长度数据类型的列时,该列会自动转换为系统可变长度数据类型...

我从来没有在SQL Server 文档中读到过这个,也没有经历过这样的事情。相反:在 SQL Server 中,固定长度的数据类型(例如 int 和 float,还有 char)被大量使用并且即使在可为 NULL 的情况下也非常有效地存储。

这个 Oracle 声明背后有什么理由吗?!

null oracle sql-server storage

8
推荐指数
1
解决办法
198
查看次数

PostgreSQL 中的条件字符串连接

我有一个parcels当前包含列owner_addr1, owner_addr2,的表owner_addr3。有时,后两个字段中的一个或两个字段为空。我想将它们组合成一个新的字段,owner_addr上面的每个字段//都在它们之间连接。

但是如果一个或多个原始列是 NULL,我不想连接//到结果列。因此,举例来说,如果owner_addr1123 4th Avenue SEowner_addr2owner_addr3NULL,然后我想要的结果列只是123 4th Avenue SE,没有123 4th Avenue SE // //(如果我只是做了这会发生CONCAT()//空字符串之间......我只是想添加//非之间的NULL列,或将其如果只有一个非NULL列,则完全退出。

有没有一种简单的方法可以在 Postgresql 中进行这种条件连接,它会遗漏空行?或者我应该写一个python脚本来做到这一点?

postgresql null condition string concat

8
推荐指数
1
解决办法
1万
查看次数

在 SQL Server 2008 中,即使没有记录包含这些列的 NULL,我如何才能获得在其架构中标记为可为空的所有列?

在我的旧数据库中,很多时候模式不必要地允许特定列的空条目。为了帮助找出特别是哪些列,我需要对 SQL Server 2008 进行一些超出我专业水平的查询。我的目标是稍微收紧模式并使自己免于处理代码中的空情况。

一种帮助我解决问题的粗略方法(选项 1)是只获取包含至少一个空条目的所有记录(并选择 *),然后对不包含空条目的列进行目视扫描。我当然可以只使用Where columnA IS NULL OR columnB IS NULL OR columnC IS NULL,但这对于有很多列的表来说变得乏味。此数据库中的某些表包含二十多列!此外,总共有大约500张桌子。因此,通用解决方案是最好的。

以下是三个让我满意的答案选项:

  • 选项 1 :“获取至少其中一列为空的所有记录”。我将查看没有空条目的列。
  • 选项 2:一个更好的答案是一些脚本,它获取包含至少一个空条目的列名列表。然后我将手动查看哪些可空列不在此列表中。
  • 选项 3:最佳答案会为我提供一个列名称列表,这些列名称在其架构中标记为可为空,即使这些列中不存在具有空条目的记录。

谢谢!

sql-server-2008 null

7
推荐指数
2
解决办法
9118
查看次数

选择条目不为空的列名

我想要一个表中至少有一个非NULL数据条目的那些列的列表。

换句话说,我想获取以下返回至少一个条目的列名称:

SELECT DISTINCT column_name FROM table WHERE column_name IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

SELECT column_name
FROM information_schema.columns
WHERE table_name = "table_name"
AND EXISTS (
    SELECT DISTINCT column_name FROM table_name WHERE column_name IS NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

但这也会返回所有条目所在的列名NULL

那么如何只获取那些没有NULL条目的列呢?

mysql null database-design select

7
推荐指数
1
解决办法
8万
查看次数

字段 NOT NULL 和 DEFAULT NULL

这个 MySQL 表让我困惑了一会儿:

mysql> desc quux;
+---------------------------+-----------------------+------+-----+---------+----------------+
| Field                     | Type                  | Null | Key | Default | Extra          |
+---------------------------+-----------------------+------+-----+---------+----------------+
| foobar                    | int(11)               | NO   |     | NULL    |                |
(...)

mysql> show create table quux;
(...)
`foobar` int(11) NOT NULL,
(...)
Run Code Online (Sandbox Code Playgroud)

由于foobar从未使用 DEFAULT 子句创建该字段,因此它会自动分配 DEFAULT NULL。然而,乍一看,这似乎与它也被定义为 NOT NULL 的事实相矛盾。

然后我意识到这个模式旨在foobar在添加新记录时强制插入一个值(和一个非 NULL 值)。

这是一种可以接受的方法,还是有更好的方法?

mysql null mysql-5.6

7
推荐指数
1
解决办法
5583
查看次数

基于多个可为空的列派生计算列

我有点像 SQL 新手。

我一直在尝试创建一个TAG从其他 5 个列调用的自动生成的列,其中一些可以保留 NULL 标记。

用于创建自动生成列的语法是:

[Tag]  AS ([Tag Type]+[Parent Tag Type]+[Tag Area No]+[Tag seq No]+[Tag Suffix])
Run Code Online (Sandbox Code Playgroud)

如果五列都没有保留 NULL,则自动生成 OK ,但是如果我尝试使用包含 NULL 的任何一列创建一行,自动生成不起作用,并将TAG列留空,即使它创建了行确定所有单独的列数据。

有没有办法让自动生成与 NULL 一起工作?

null sql-server computed-column sql-server-2017

7
推荐指数
2
解决办法
529
查看次数

PostgreSQL 是否索引空值?

如果我有一张像这样的桌子:

Food
-----------------
name | price | x
Run Code Online (Sandbox Code Playgroud)

假设我在 name 和 price 上创建了一个索引,但是数据库在某些行中为 name 和 price 提供了一堆空值。PostgreSQL 会自动跳过索引这些行吗?我听说这种行为可能在以后的版本中有所改变。

postgresql index null

7
推荐指数
1
解决办法
1万
查看次数

同一个表中的多个 BIT 数据类型列

考虑来自 Microsoft SQL 文档页面的以下信息:

SQL Server 数据库引擎优化位列的存储。如果表中有 8 个或更少位列,则这些列存储为 1 个字节。如果有 9 到 16 位列,则这些列存储为 2 个字节,依此类推。

请参阅:https : //docs.microsoft.com/en-us/sql/t-sql/data-types/bit-transact-sql?view=sql-server-2017

所以,如果我创建一个这样的新表:

CREATE TABLE MyTable (
    Id int PRIMARY KEY,
    Value1 bit,
    Value2 bit,
    Value3 bit,
    Value4 bit,
    Value5 bit,
    Value6 bit,
    Value7 bit,
    Value8 bit)
Run Code Online (Sandbox Code Playgroud)

...然后一行中的所有位列(Value1、Value2、...Value8)应占用一个字节。或者?

当我们仔细观察时,一行的 Value1 字段内部可以包含值 0、1 或 NULL。这意味着该字段实际上是三态值或三元值。2 个这样的值可以表示 3*3=9 个值的字典。8 个这样的值是一个包含 6561 个值的字典。

如果我们考虑这样一行的内存占用,8 位应该占用一个字节。这意味着这一字节编码 6561 个值而不是 256 个值。这显然是错误的。

因此,要么 MS SQL 文档具有误导性,要么我们在这里谈论一些量子计算。当然是前者,但我真正想知道的是这个问题的答案:可空位(当然,SQL Server 位默认可以为空)是如何真正存储在 SQL Server 底层结构中的?

null sql-server memory

7
推荐指数
1
解决办法
556
查看次数

加入 NULL 键列优化为表和索引扫描

我有一个关于这个查询计划的问题。

我们在测试环境中有一个表 Order_Details_Taxes,它有 11,225,799 行。该表有一个列 OrdTax_PLTax_LoadDtl_Key,它在每一行上都是 NULL。此测试环境的配置方式使此列始终为 NULL。此列上有一个索引。

我使用列的 NULL 值对该表运行了一些查询。NULL INNER JOIN 永远不会产生任何结果。

declare @Keys table (KeyValue decimal(15,0))
insert into @Keys (KeyValue) values (null)

select OrdTax_PLTax_LoadDtl_Key
from @Keys
inner join Order_Details_Taxes
    on OrdTax_PLTax_LoadDtl_Key = KeyValue

select *
from @Keys
inner join Order_Details_Taxes
    on OrdTax_PLTax_LoadDtl_Key = KeyValue
Run Code Online (Sandbox Code Playgroud)

这些是查询计划中的第一个查询。第一个select从亿行表开始并连接到@Keys。第二个select从@Keys 开始,但它对这个表进行聚集索引扫描。

我知道在大多数情况下临时@Tables 是有问题的,所以我将查询更改为使用临时 #Table:

if object_id ('tempdb..#Keys') is not null
    drop table #Keys
create table #Keys (KeyValue decimal(15,0))
insert into #Keys (KeyValue) values (null)

select OrdTax_PLTax_LoadDtl_Key …
Run Code Online (Sandbox Code Playgroud)

null join sql-server execution-plan sql-server-2014

6
推荐指数
1
解决办法
474
查看次数

为什么 ORDER BY NULLS LAST 会影响主键上的查询计划?

使用 PostgreSQL 11,我有下表,大约有 4.5 亿行:

postgres=> \d+ sales
                                                             Table "public.sales"
              Column               |            Type             |             Modifiers              | Storage  | Stats target | Description
-----------------------------------+-----------------------------+------------------------------------+----------+--------------+-------------
 created_terminal_id               | integer                     | not null                           | plain    |              |
 company_id                        | integer                     | not null                           | plain    |              |
 customer_id                       | integer                     |                                    | plain    |              |
 sale_no                           | character varying(20)       | not null                           | extended |              |
 sale_type                         | smallint                    | not null                           | plain    |              |
 source_type                       | smallint                    | not null                           | plain …
Run Code Online (Sandbox Code Playgroud)

postgresql index null order-by execution-plan

6
推荐指数
1
解决办法
442
查看次数