我对sql数组索引的作用以及索引[]
的返回类型应该是什么感到困惑。
我有一个3,2阵列:
select ARRAY[
[1,1],
[2,2],
[3,3]];
--> {{1,1},{2,2},{3,3}}
(顺便说一句,pgadmin3说这是一个“数组整数[]”,而不是“数组整数[] []”。)
假设我想提取第一行(索引从1开始?):
-- A
select (ARRAY[
[1,1],
[2,2],
[3,3]])[1];
--> NULL
咦?为什么不{1,1}
(类型int[]
)。
-- B
select (ARRAY[
[1,1],
[2,2],
[3,3]])[1][:];
--> {{1,1}}
......似乎是合法的。但是:
-- C
select (ARRAY[
[1,1],
[2,2],
[3,3]])[1][:][1];
--> {}
为什么这与A不同?
如何从int [] [](1d数组)中提取一行作为int [](1d数组)。
答案 0 :(得分:2)
如何从int [] []中提取行作为postgres中的int []
通过聚合未连接的元素:
select array_agg(elem)
from unnest(array[[1,1],[2,2],[3,3]]) elem;
array_agg
---------------
{1,1,2,2,3,3}
(1 row)
您可以在此信息中找到更多信息:How to get the dimensionality of an ARRAY column?
如果你想获得第二个子阵列:
with my_data(id, arr) as (
values
(1, array[
[1,1],
[2,2],
[3,3]]),
(2, array[
[1,1,11],
[2,2,22],
[3,3,33]])
)
select array_agg(elem)
from my_data,
unnest(arr[2:2]) elem
group by id;
array_agg
-----------
{2,2}
{2,2,22}
(2 rows)
注1。符号[2:2]
表示从第2个元素到第2个元素的切片,因此它指向第二个子数组。
注意2.多维数组必须具有匹配维度的数组表达式。
答案 1 :(得分:1)
除了klin的答案和使用提供的功能here(带有一些修复):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
android:weightSum="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:id="@+id/test"
android:textAppearance="@style/TextAppearance.AppCompat.Display1" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignEnd="@+id/test"
android:layout_alignParentBottom="true"
android:layout_alignRight="@+id/test"
android:clickable="true"
app:fabSize="mini"
app:srcCompat="@android:drawable/presence_online" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:background="?attr/colorPrimary"
android:contentInsetStart="0dp"
android:contentInsetLeft="0dp"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
<android.support.v7.widget.RecyclerView
android:layout_below="@+id/toolbar"
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>