【问题标题】:Rename items in PostgreSQL or any SQL重命名 PostgreSQL 或任何 SQL 中的项目
【发布时间】:2015-01-02 21:37:45
【问题描述】:

我正在使用一个名为 zoho 报告的程序并尝试更改我上传的文件中的对象名称。 ZOHO 无法重命名示例。我想使用 SQL,最好是 Postgres。

phonenumber:

1. 5203123333
2. 8323125547
3. 6025456564
4. 43654xxx3

我希望它们显示为:

1. TUCSON,AZ
2. Houston,TX
3. Chandler,AZ
4. WHATEVER

我用过这个:

SELECT "TO", replace("TO",
    '4802xxx82', 'Chandler'), replace("TO",
    '832xxxx84', 'Houston, TX'), FROM "Craiglist-December Calls" 

有效但返回一个新列。我只需要一个新列。

然后我尝试了IF 条件,但在我尝试超过三个重命名后出错。

if("To"='83xxxx284','Houston TX',if("To"='818xxxx6','Santa Clarita CA','0'))

尝试用名称替换大约 8 个数字,所以我可以按名称而不是数字来绘制它们。
有没有办法用 Postgres 重命名同一列中的所有这些数字?

【问题讨论】:

标签: mysql sql postgresql zoho


【解决方案1】:

据我了解,您想要“同一列”,表示同一列名称。所以使用column alias。并使用"simple" CASE statement

SELECT CASE "TO"            -- "simple" CASE
          WHEN '4802xxx82' THEN 'Chandler'
          WHEN '832xxxx84' THEN 'Houston, TX'
          WHEN ...          -- 6 more ...
          ELSE "TO"
       END AS "TO"          -- column alias (output column name)
FROM   "Craiglist-December Calls";

您的列名选择不明智。永远不要使用关键字作为标识符。如果你双引号标识符允许非法名称,你需要双引号现在区分大小写!)名称的余生。 "To" 不是"TO"的有效引用。

manual about identifiers开头。

【讨论】:

  • 谢谢,在 ZOHO 报告查询中工作!
【解决方案2】:

我认为最好有第二张带有“翻译”的表。第一列(模式)如 83____284 和第二列(显示) - 新名称 Houston TX。然后像这样选择:

SELECT t2.display FROM orig_table t1, translate_table t2 WHERE t1.phonenumber LIKE t2.pattern

PS:PostgreSQL 是“Postgres SQL”的缩写(带 S)。

【讨论】:

    【解决方案3】:

    可能最好的方法是用电话号码和位置来扩大表格。 我将使用text 列,因为我的目标是postgresql,对于其他数据库,vharchar() 列或适当的宽度可能是更好的选择。

    creare table phnne_directory (phone text primary key, location text);
    insert into phnne_directory values ('5203123333','TUCSON,AZ'),
        ('8323125547','Houston,TX')
        ('6025456564','Chandler,A')'
        ('43654xxx3','WHATEVER');
    
    SELECT C."TO", coalesce(p.location,'unknown')
        FROM "Craiglist-December Calls" as c
        JOIN phnne_directory as p on p.phone = c.to;
    

    这样您就可以将数据排除在查询之外。

    【讨论】:

      【解决方案4】:

      请尝试以下方法:

      SELECT 
        CASE WHEN "TO" = '4802xxx82' THEN 'Chandler'
           WHEN "TO" = '832xxxx84' THEN 'Houston, TX'
           ELSE "TO"
        END AS "TO"
      FROM "Craiglist-December Calls"
      

      您也可以在 CASE 语句中添加其他条件,所有结果都将显示在一列中。 请在 Postgre 中找到更多关于 CASE 的声明 here

      【讨论】:

        猜你喜欢
        • 2021-07-09
        • 2012-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多