Postgresql 9.2 语法问题

Postgresql 9.2 syntax issue

我正在尝试使用 Postgresql 9.2 执行此查询

WITH udetail as (select(regexp_split_to_array('user@domain', E'\@+')))
select * from udetail[1];

Buy it 在 '[' 的开始位置附近给我一个语法错误。同样的查询在 9.3 版下运行良好。所以我想知道是否有其他方法可以编写查询以获得相同的结果。

我想你正在寻找这样的东西:

WITH udetail(x) as (
   select(regexp_split_to_array('user@domain', E'\@+')))
select x[1] from udetail;

我不认为你可以在你的情况下索引像 udetail 这样的 table 表达式。 table表达式的是数组类型。因此,您可以在列上使用数组下标编号,而不是 table 本身。

Demo here

您应该使用别名作为查询参数:

with udetail(arr) as (
    select regexp_split_to_array('user@domain', E'\@+')
    )
select arr[1] from udetail;

或作为列别名:

with udetail as (
    select regexp_split_to_array('user@domain', E'\@+') as arr
    )
select arr[1] from udetail;

你也可以不使用别名:

with udetail as (
    select regexp_split_to_array('user@domain', E'\@+')
    )
select regexp_split_to_array[1] from udetail;