PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Nhận các giá trị chính xác kép từ các chuỗi không nhất quán để sử dụng ST_GeomFromText (PostGIS)

Theo tài liệu , ST_GeomFromText yêu cầu (text, integer) , không phải (double precision) .

Tất cả những gì bạn cần làm là CONCAT() và nó sẽ hoạt động.

Giải pháp

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

Để thử nghiệm của bạn

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";

Chỉ để giải trí

Tôi quyết định chuyển đổi chuỗi của bạn thành DOUBLE PRECISION được yêu cầu ban đầu và sau đó trở lại thành một chuỗi ... kết quả cuối cùng giống như trên, nhưng nó thực hiện với nhiều công việc hơn. Tuy nhiên, đó là những gì bạn yêu cầu.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách hiển thị giá trị rỗng khi chạy truy vấn trong psql (PostgreSQL)

  2. PostgreSQL - Trả lại nội dung hàng khi UPDATE không thành công

  3. CS50:Toán tử LIKE, thay thế biến với% mở rộng

  4. Tại sao PostgreSQL hợp nhất người dùng và nhóm thành vai trò?

  5. Truy vấn SQL không mong muốn đến cơ sở dữ liệu Postgres trên Rails / Heroku