标签: isnull

计算每行 NULL 值

我想在不枚举列名的情况下计算表中每行存在的空值数。例如:

WITH t as (VALUES
  (NULL ,'hi',2,NULL,'null'),
  ('' ,'hi',2,3,'test'),
  (NULL ,'hi',2,3,'null')
)
SELECT countnulls(t)
FROM t;
Run Code Online (Sandbox Code Playgroud)

会导致:

numnulls
2
0
1
Run Code Online (Sandbox Code Playgroud)

我能得到的最接近的是以下黑客row_to_json()

select 
(CHAR_LENGTH(row_to_json(t)::text)
 - CHAR_LENGTH(REPLACE(row_to_json(t)::text, 'null', '')))/4 from t;
Run Code Online (Sandbox Code Playgroud)

这是......相当的黑客(不是很好)。它可以工作,有点,但是当它出现在实际数据或列名中时,它会将字符串 'null' 计为 NULL。所以在上述情况下是不正确的。

postgresql null isnull postgresql-9.6

5
推荐指数
1
解决办法
4531
查看次数

提取表中包含少于 x NULL 的行

我正在使用包含大量 NULL 的 SQL Server 数据库。为了分析我的数据,我想提取数据库表的所有行,包括少于 x 个 NULL 标记(例如 x=2)。

我的数据库类似于这个结构:

 c1        c2      c3      c4        c5        
-----------------------------------------------------
2          3       NULL    1         2
2          NULL    NULL    1         2
2          3       NULL    NULL      2
NULL       3       NULL    1         NULL
2          3       NULL    1         2
Run Code Online (Sandbox Code Playgroud)

我尝试了查询,它没有返回错误,但没有选择任何行:

SELECT * FROM test123 
WHERE ((ISNULL(c1,1) + ISNULL(c2,1) + ISNULL(c3,1) + ISNULL(c4,1) + ISNULL(c5,1)) < 2);
Run Code Online (Sandbox Code Playgroud)

我希望此查询返回第一行和第五行,但结果包含 0 行。


我无法测试以下代码,因为我没有在数据库上写入的权限,但这里有一个(伪)代码,用于创建像我这样的表:

CREATE TABLE test123(
    c1 float,
    c2 float,
    c3 float,
    c4 float,
    c5 float
) GO
INSERT …
Run Code Online (Sandbox Code Playgroud)

sql-server query isnull

4
推荐指数
2
解决办法
244
查看次数

如何用 SQL 中的 ISNULL 函数替换以下查询?

我有以下查询。出于性能优化的原因,我被要求用 SQL 中的 ISNULL 函数替换逻辑。我怎样才能做到这一点?请指教。

                   SELECT CASE 
                               WHEN tb1.[tag-value] IS NOT NULL THEN tb1.[tag-value]
                               ELSE 'N/A'
                          END     AS [tag-value]
                   FROM   @AgentTableFilt ta
Run Code Online (Sandbox Code Playgroud)

performance sql-server isnull query-performance

0
推荐指数
1
解决办法
377
查看次数

用值替换 NULL

这是我的临时表:

CREATE TABLE #test123(
    c1 float,
    c2 float,
    c3 float,
    c4 float,
    c5 float
);

INSERT #test123(c1,c2,c3,c4,c5)
VALUES (2,3,NULL,1,2),
       (2,NULL,NULL,1,2),
       (2,3,NULL,NULL,2),
       (NULL,3,NULL,1,NULL),
       (2,3,NULL,1,2);
Run Code Online (Sandbox Code Playgroud)

当我运行以下查询来替换第一列中的所有 NULL 时

INSERT INTO #test123 (c1) VALUES (ISNULL(c1,0));
Run Code Online (Sandbox Code Playgroud)

或者

INSERT INTO #test123 (c1) SELECT CASE WHEN c1 IS NULL THEN 0  END AS c1;
Run Code Online (Sandbox Code Playgroud)

我两次都收到错误“无效的列名 'c1'”。

的语法(来源INSERT INTO是:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...); 
Run Code Online (Sandbox Code Playgroud)

null sql-server insert replace isnull

-1
推荐指数
1
解决办法
53
查看次数