SELECT REGEXP_SUBSTR(
geom_,
'POINT\(([+-]?\d+(\.\d+)?) ([+-]?\d+(\.\d+)?)\)',
1,
1,
NULL,
1
) AS longitude,
REGEXP_SUBSTR(
geom_,
'POINT\(([+-]?\d+(\.\d+)?) ([+-]?\d+(\.\d+)?)\)',
1,
1,
NULL,
3
) AS latitude
FROM your_table;
或:
SELECT REGEXP_SUBSTR( geom_, '[+-]?\d+(\.\d+)?', 1, 1 ) AS longitude,
REGEXP_SUBSTR( geom_, '[+-]?\d+(\.\d+)?', 1, 2 ) AS latitude
FROM your_table;
或使用简单的字符串函数:
SELECT SUBSTR( geom_, 7, INSTR( geom_, ' ' ) - 7 )
AS longitude,
SUBSTR( geom_, INSTR( geom_, ' ' ) + 1, LENGTH( geom_ ) - INSTR( geom_, ' ' ) - 1 )
AS latitide
FROM your_table
其中,对于样本数据:
CREATE TABLE your_table ( geom_ ) AS
SELECT 'POINT(-122.419956922531 37.7647100858191)' FROM DUAL;
全部输出:
经度 |纬度
:---------------- | :---------------
-122.419956922531 | 37.7647100858191
(注意:如果您想要一个数字而不是包含数值的字符串,请将输出包装在 TO_NUMBER 中。)
db小提琴here
更新:
如果您的小数分隔符通常为,,那么您可以使用TO_NUMBER,并在使用TO_NUMBER 时明确指定. 小数分隔符作为第三个参数:
SELECT TO_NUMBER(
REGEXP_SUBSTR( geom_, '[+-]?\d+(\.\d+)?', 1, 1 ),
'999D9999999999999',
'NLS_NUMERIC_CHARACTERS=''.,'''
) AS longitude,
TO_NUMBER(
REGEXP_SUBSTR( geom_, '[+-]?\d+(\.\d+)?', 1, 2 ),
'999D9999999999999',
'NLS_NUMERIC_CHARACTERS=''.,'''
) AS latitude
FROM ( select 'POINT(-122.419956922531 37.7647100858191)' as geom_ from dual );
db小提琴here