重命名 PostgreSQL 或任何 SQL 中的项目

Rename items in PostgreSQL or any SQL

我正在使用一个名为 zoho reports 的程序并尝试更改我上传的文件中的对象名称。 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" 

有效,但 returns 一个新列。我只需要一个新专栏。

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

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

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

请尝试以下操作:

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

您也可以在 CASE 语句中添加其他条件,所有结果将显示在一列中。 请在 Postgre here

中找到更多关于 CASE 语句的信息

我觉得第二个table和"translations"比较好。第一列(模式)如 83____284,第二列(显示)- 新名称 Houston TX。然后 select 这样:

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

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

据我了解,您想要 "the same column",意思是同一列 name。所以使用 column alias. And use a "simple" CASE statement:

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

您的列名选择不当。切勿使用关键字作为标识符。如果你双引号标识符允许非法名称,你需要双引号现在区分大小写!)名称的其余部分。 "To" 不是 "TO".

的有效引用

manual about identifiers 开始。

可能最好的方法是使用 phone 号码和位置来创建一个 table。 我将使用 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;

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