Postgresql - 在select中使用xpath时如何将xml数据类型更改为整数

时间:2015-12-12 19:15:26

标签: xml postgresql xpath

我尝试从一个xml字段中选择值,并将所选值插入另一个具有整数类型的表字段。

QUERY:

INSERT INTO "Match" 
select 
unnest(xpath('./game/id/text()', "File"))
FROM "Files"

选择正常,但是当我尝试插入时,则会发生错误:

SQL error:
ERROR:  column "id" is of type integer but expression is of type xml
LINE 3: unnest(xpath('./game/id/text()', "File")),

HINT:  You will need to rewrite or cast the expression.

当我尝试使用强制转换更改xml类型时,我收到另一个错误:

SQL error:
ERROR:  cannot cast type xml to integer
LINE 3: cast(unnest(xpath('./game/id/text()', "File"))as integer)

当我尝试使用XMLSERIALIZE更改类型时,会发生另一个错误:

SQL error:
ERROR:  argument of XMLSERIALIZE must not return a set
LINE 3: XMLSERIALIZE(CONTENT unnest(xpath('./game/id/text()', "File"...

如何将所选值插入另一个表?

1 个答案:

答案 0 :(得分:3)

首先选择XML“id”节点中的文本:

zoomend

这将返回一个您不需要的数组,从而产生零行或多行:

xpath('game/id/text()', col1)

unnest(xpath('game/id/text()', col1)) 允许您为表格中的每一行运行cross join lateral

unnest(xpath(...))

最后,Postgres无法将XML转换为数字。您需要中间转换为文本:

cross join lateral
        unnest(xpath('game/id/text()', col1)) xp(id)

Example at SQL Fiddle.