【问题标题】:Append text to column data based on the column in PostgreSQL根据 PostgreSQL 中的列将文本附加到列数据
【发布时间】:2020-04-18 05:11:10
【问题描述】:

我想在表格每一列的每个单元格中附加一些文本,作为该特定列的符号。例如说我的表如下(所有字段的类型字符不同):

姓名 年龄 位置 詹姆斯 45 法国 西蒙 33 美国 ben 76 中国

我想修改为:

姓名 年龄 位置 ajames b45 法国 阿西蒙 b33 库萨 阿本 b76 中国

有人对我如何做到这一点有任何建议吗?

【问题讨论】:

  • 这样做的原因是因为我知道我想用字母符号化数据,因为我将在表格上执行某种数据挖掘,而我拥有的数据挖掘代码采用字符串。
  • 很抱歉使用答案来提出问题,但有没有办法扭转答案 1 中的过程? (无法评论)。因为我执行了更新,但在 where 子句中,我拼错了与运算符值相似的内容,并将文本添加到所有条目中。谢谢!

标签: postgresql


【解决方案1】:

首先,您必须将您的年龄转换为某种字符串。之后,您可以像这样转换值(当然您必须为每个字段执行此操作):

update mytable set name = 'a' || name, age = 'b' || age;

这会更新表格中的数据。如果您只希望输出带有前缀,您可以使用以下方法:

select 'a' || name as name, 'b' || age as age from mytable;

在这种情况下,无需转换您的年龄数据类型。

【讨论】:

  • 谢谢,这似乎就是我要找的东西!
  • 如果列初始值为空,则它不起作用:(
  • “不工作”是什么意思?有任何错误信息吗?如果您正在寻找不同的行为,您可以尝试使用 concat 函数:postgresql.org/docs/9.1/static/functions-string.html
  • @subbu 不确定您在寻找什么样的建议。带有 null 的字符串操作没有意义。您可以跳过空值 (where column is not null),在连接之前将空值转换为空字符串,或者在您的特殊情况下最好的任何方式。没有通用的解决方案。
  • @SebastianvomMeer 谢谢。是的,尝试使用 concat_ws(...) 和 COALESCE(...)。这些解决了我的问题。
【解决方案2】:

接受的答案是不处理空值和空格。所以我给出了这个答案。如果它对某人有帮助,那将是我的荣幸。

update "public"."mytable" set 
"name"= case when "name" is null or trim("name")='' then null else 'a' || "name" end,
"age"= case when "age" is null or trim("age")='' then null else 'b' || "age" end,
"location"= case when "location" is null or trim("location")='' then null else 'c' || "location" end;

【讨论】:

    猜你喜欢
    • 2021-12-21
    • 2021-10-26
    • 2021-03-27
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2019-10-12
    相关资源
    最近更新 更多