You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Oracle SQL中拆分WKT字符串提取经纬度

拆分WKT坐标为独立经纬度列的SQL方案

针对你提供的POINT (-2.534981 52.14983)格式WKT字段,以下是不同数据库下拆分经度、纬度为独立列的SQL实现:

MySQL/MariaDB

通过字符串替换和截取函数处理:

SELECT
    job.job_number,
    CAST(SUBSTRING_INDEX(REPLACE(REPLACE(job.WKT_values, 'POINT (', ''), ')', ''), ' ', 1) AS DECIMAL(10,6)) AS longitude,
    CAST(SUBSTRING_INDEX(REPLACE(REPLACE(job.WKT_values, 'POINT (', ''), ')', ''), ' ', -1) AS DECIMAL(10,6)) AS latitude
FROM
    job;

PostgreSQL

方案1:使用PostGIS扩展(推荐,兼容性更强)

如果数据库已安装PostGIS,可直接调用GIS函数解析坐标:

SELECT
    job.job_number,
    ST_X(ST_GeomFromText(job.WKT_values)) AS longitude,
    ST_Y(ST_GeomFromText(job.WKT_values)) AS latitude
FROM
    job;

方案2:纯字符串函数处理

无PostGIS时用字符串截取实现:

SELECT
    job.job_number,
    CAST(SPLIT_PART(TRIM(BOTH 'POINT ()' FROM job.WKT_values), ' ', 1) AS NUMERIC(10,6)) AS longitude,
    CAST(SPLIT_PART(TRIM(BOTH 'POINT ()' FROM job.WKT_values), ' ', 2) AS NUMERIC(10,6)) AS latitude
FROM
    job;

SQL Server

通过字符索引定位截取坐标:

SELECT
    job.job_number,
    CAST(SUBSTRING(job.WKT_values, CHARINDEX('(', job.WKT_values) + 1, CHARINDEX(' ', job.WKT_values) - CHARINDEX('(', job.WKT_values) - 1) AS DECIMAL(10,6)) AS longitude,
    CAST(SUBSTRING(job.WKT_values, CHARINDEX(' ', job.WKT_values) + 1, CHARINDEX(')', job.WKT_values) - CHARINDEX(' ', job.WKT_values) - 1) AS DECIMAL(10,6)) AS latitude
FROM
    job;

注意:优先选择对应数据库的GIS函数方案,这类函数能兼容WKT格式的微小变化(如多余空格),纯字符串处理依赖固定格式,若WKT结构变更可能失效。

内容的提问来源于stack exchange,提问作者Rob Morris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 05:48:22