【问题标题】:Adding column to table based on whether another column = a specific string根据另一列是否=特定字符串向表中添加列
【发布时间】:2021-01-16 17:50:02
【问题描述】:

我想添加一个名为“Sweep”的列,其中包含基于“Result”是否为扫描的布尔值。因此,如果“结果”为“4-0”或“0-4”,我希望“扫描”列中的值为True,如果不是,则为False

这是表格的一部分:

我试过这个:

ALTER TABLE "NBA_finals_1950-2018"
ADD "Sweep" BOOL;

UPDATE "NBA_finals_1950-2018"
    SET "Sweep" = ("Result" = '4-0' OR "Result" = '0-4');

但由于某种原因,当我运行此代码时...:

SELECT *
FROM "NBA_finals_1950-2018"
ORDER BY "Year";

...只有一个行(最后一行)具有值 True,即使有其他行的结果是扫描('4-0' 或 '0-4'),如下图。

我不知道为什么会这样,但我猜UPDATE...SET 代码有问题。请帮忙。 提前致谢。

注意:我使用的是 PostgreSQL 13

【问题讨论】:

  • 与您的问题无关,但是:您应该真正避免使用那些可怕的带引号的标识符。他们的麻烦比他们值得的要多得多。 wiki.postgresql.org/wiki/…

标签: sql postgresql sql-update alter-table


【解决方案1】:

如果字符串不是真正的样子,就会发生这种情况——这通常是由于开头或结尾的空格。或者可能是连字符不同,或者其他相似的字符。

您只需要找到正确的模式。 select 也是如此。这不返回任何值:

select *
from "NBA_finals_1950-2018"
where "Result" in ('4-0', '0-4');

你可以试试:

where "Result" like '%0-4%' or
      "Result" like '%4-0%'

但是,这应该可以满足您的要求:

where "Result" like '%4%' and
      "Result" like '%0%'

因为数字都是个位数。

您可以将其合并到update 语句中。

注意:双引号是个坏主意。我建议在不转义名称的情况下创建表和列。

【讨论】:

  • 如果您仔细查看您发布的图片,数据中有两个不同长度的连字符。条件"Result" like '%0%' 应该会产生你想要的结果。
  • 谢谢,但我使用了双引号,因为我在所有其他行中都使用了双引号(之前我不知道这是一个坏主意)
  • 史蒂夫·卡斯 谢谢你,我没注意到。
  • UPDATE "NBA_finals_1950-2018" SET "Result" = REPLACE("Result", '–', '-') WHERE "Result" LIKE '%–%'; - 最好确保所有行都有相同类型的连字符,所以我使用了这个。
  • @SuchirKumaravel 。 . .我同意。
猜你喜欢
  • 2019-10-11
  • 2021-04-18
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
相关资源
最近更新 更多