ホームページ >データベース >mysql チュートリアル >PostgreSQL 配列の添字を 1 から再正規化する方法
PostgreSQL 配列インデックスを 1 から開始するように調整する
PostgreSQL の柔軟性により、標準の 1 から始まらないインデックスを持つ配列が可能です。たとえば、次の配列要素には 5 から 7 のインデックスが付けられます。
<code class="language-sql">SELECT '[5:7]={1,2,3}'::int[];</code>
最初の要素にアクセスするには、インデックス 5 を使用する必要があります:
<code class="language-sql">SELECT ('[5:7]={1,2,3}'::int[])[5];</code>
ただし、多くのユーザーはインデックスが 1 から始まる配列を好みます。これを実現する方法は次のとおりです。
<code class="language-sql">SELECT ('[5:7]={1,2,3}'::int[])[array_lower('[5:7]={1,2,3}'::int[], 1):array_upper('[5:7]={1,2,3}'::int[], 1)];</code>
これにより、配列スライスが最小のインデックスから最大のインデックスまで抽出され、インデックス付けが効果的にリセットされます。
共通テーブル式 (CTE) を使用した、より読みやすいアプローチ:
<code class="language-sql">WITH cte(a) AS (SELECT '[5:7]={1,2,3}'::int[]) SELECT a[array_lower(a, 1):array_upper(a, 1)] FROM cte;</code>
PostgreSQL 9.6 以降では、スライス仕様の下限と上限を省略するという簡略化された方法が存在します。
<code class="language-sql">SELECT my_arr[:];</code>
この例では、括弧を使用すると読みやすくなります。
<code class="language-sql">SELECT ( '[5:7]={1,2,3}'::int[] )[:];</code>
このアプローチは効率的であり、9.6 より前の Postgres バージョンでもうまく動作します。
以上がPostgreSQL 配列の添字を 1 から再正規化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。