0

我正在使用一个名为 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 重命名同一列中的所有这些数字?

4

4 回答 4

1

我认为最好有第二张带有“翻译”的桌子。第一列(模式)喜欢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)。

于 2015-01-02T22:46:22.010 回答
1

据我了解,您想要“相同的列”,即相同的列。所以使用列别名。并使用“简单”CASE语句

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"

从有关标识符的手册开始。

于 2015-01-03T04:40:33.967 回答
1

可能最好的方法是用电话号码和位置来增加一张桌子。我将使用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;

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

于 2015-01-03T21:47:29.037 回答
0

请尝试以下操作:

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

您也可以在 CASE 语句中添加其他条件,所有结果都将显示在一列中。请在此处找到有关CASEPostgre 中的语句的更多信息

于 2015-01-02T21:56:05.717 回答