sql >> データベース >  >> RDS >> PostgreSQL

ST_GeomFromText(PostGIS)を使用するために、一貫性のない文字列から倍精度値を取得します

    ドキュメントによるとST_GeomFromText (text, integer)が必要です 、(double precision)ではありません 。

    あなたがする必要があるのはCONCAT()だけです 動作するはずです。

    ソリューション

    ST_GeomFromText(CONCAT('LINESTRING(', "YourTable"."YourString", ')'), 4326);
    

    テスト用

    SELECT
        ST_GeomFromText('LINESTRING(3.985 58.934, 4.56 61.2323, 5.4 63.234355, 3.25982 59.309)', 4326),
        CONCAT('LINESTRING(', "T1"."C1", ')'),
        ST_GeomFromText(CONCAT('LINESTRING(', "T1"."C1", ')'), 4326)
    FROM
        (
            SELECT '3.985 58.934, 4.56 61.2323, 5.4 63.234355, 3.25982 59.309, 4.5632 58.32423' AS "C1"
        ) AS "T1";
    

    楽しみのために

    文字列を最初にリクエストされたDOUBLE PRECISIONに変換することにしました その後、文字列に戻ります...最終結果は上記と同じですが、より多くの作業が必要になります。それにもかかわらず、それはあなたが求めたものです。

    SELECT
        ST_GeomFromText(CONCAT('LINESTRING(', (SELECT STRING_AGG(ARRAY_TO_STRING("Line"."Points", ' '), ',') FROM REGEXP_MATCHES(ARRAY_TO_STRING(REGEXP_SPLIT_TO_ARRAY("T1"."C1", E', | ')::DOUBLE PRECISION[], ' '), '(\d*\.\d*) (\d*\.\d*)', 'g') AS "Line"("Points")), ')'), 4326)
    FROM
        (
            SELECT '3.985 58.934, 4.56 61.2323, 5.4 63.234355, 3.25982 59.309, 4.5632 58.32423'::TEXT AS "C1"
        ) AS "T1";
    



    1. CXPACKET待機の詳細:歪んだ並列処理

    2. Nullでない場合にフィールドを更新する

    3. SQLServerの@@MAX_PRECISIONとは何ですか?

    4. PHP + MySQL +ストアドプロシージャ、アウトバリューにアクセスするにはどうすればよいですか?