gpt4 book ai didi

postgresql - 在忽略 NULL 值的情况下连接 PostgreSQL 中的 2 列

转载 作者:行者123 更新时间:2023-11-29 13:26:01 25 4
gpt4 key购买 nike

我正在尝试连接 2 列(一列是 CHAR(7),另一列是 CHAR(6)),在两列之间添加一个 _ 分隔符并将结果限制为 10,000 条记录。我也想随机抽样。

我在这里阅读了许多优秀的帖子,包括:

Combine two columns and add into one new column

上面的帖子以及我看过的其他帖子对我来说都是很好的起点,但我还没有达到预期的结果。

首先我尝试了:

SELECT osnrth1m||'_'||oseast1m FROM postzon
ORDER BY RANDOM()
LIMIT 10000

虽然它提供了形式为“1234567_123456”的正确结果(忽略引号),但仍有许多结果为“_”。

上面的链接帖子说这是因为使用连接运算符(即 attribute1||attribute2)不考虑 NULL 值。

然后我尝试使用 COALESCE 函数:

SELECT COALESCE(osnrth1m,'')||'_'||COALESCE(oseast1m,'') FROM postzon
ORDER BY RANDOM()
LIMIT 10000;

但这也产生了一些结果,如前所述,这些结果只是下划线。

然后我尝试了 CONCAT_WS 函数:

SELECT CONCAT_WS('_',osnrth1m,oseast1m) FROM postzon
ORDER BY RANDOM()
LIMIT 10000;

但不幸的是,有些行再次返回时只有下划线。

最后,我尝试弄乱 CASE - 我无法想出一种方法来编写查询,以便忽略 NULL 值。事实上,我尝试的最后一个特别说明如果 NULL 然后将结果显示为 NULL(无论如何我认为它是这么说的!):

SELECT CASE WHEN (osnrth1m,oseast1m) IS NULL THEN NULL
ELSE CONCAT_WS('_',osnrth1m,oseast1m)
END
FROM postzon
ORDER BY RANDOM()
LIMIT 10000;

如果我遗漏了一些明显的东西,我很抱歉,但有人可以建议一种方法来实现这一点,完全跳过 NULL 值吗?

类似的东西:

SELECT CASE WHEN (osnrth1m,oseast1m) IS NULL THEN IGNORE/DROP/EXCLUDE
ELSE CONCAT_WS('_',osnrth1m,oseast1m)
END
FROM postzon
ORDER BY RANDOM()
LIMIT 10000;

是否有像 IGNORE 或 DROP 或 EXCLUDE 这样的 PostgreSQL 运算符?

对于上面的每个查询,我尝试在 SELECT 语句之后包括以下行:

WHERE (osnrth1m IS NOT NULL OR oseast1m IS NOT NULL) 

但这似乎并没有改变结果。

如有任何帮助,我们将不胜感激!

谢谢

最佳答案

您需要 osnrth1moseast1m 都为 not null。这就是为什么您应该使用 and 而不是 or 的原因:

WHERE (osnrth1m IS NOT NULL AND oseast1m IS NOT NULL)

查询是:

SELECT
CONCAT_WS('_',osnrth1m,oseast1m)
FROM postzon
WHERE (osnrth1m IS NOT NULL AND oseast1m IS NOT NULL)
ORDER BY RANDOM()
LIMIT 10000;

如果有一个空的 osnrth1moseast1m 值也需要排除,那么:

SELECT
CONCAT_WS('_',osnrth1m,oseast1m)
FROM postzon
WHERE
osnrth1m IS NOT NULL AND
oseast1m IS NOT NULL AND
osnrth1m <> '' AND
oseast1m <> ''
ORDER BY RANDOM()
LIMIT 10000;

关于postgresql - 在忽略 NULL 值的情况下连接 PostgreSQL 中的 2 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33738833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com