重命名 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;
这样您就可以将数据排除在查询本身之外。
我正在使用一个名为 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;
这样您就可以将数据排除在查询本身之外。