[英]Oracle 18c XE- How to split string into numbers
我正在尝试将字符串拆分为数字。 字符串看起来像这样:
POINT(-122.419956922531 37.7647100858191)
我想删除“点”和“括号”,只得到数字。 我试过这个(下面的代码)。 尽管它在表中看起来不错,但我一直未能将结果转换为数字:
select
REGEXP_SUBSTR(geom_, '(\S*)' ) as longi,
REGEXP_SUBSTR(geom_, '(\S*)[^()]',1,2) as atti
from
(select
a.*,
REGEXP_SUBSTR('POINT(-122.419956922531 37.7647100858191)', '\d.+') as geom_ from dual a);
关于如何从POINT(-122.419956922531 37.7647100858191)
提取数字的任何提示?
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;
他们都输出:
\n经度 | 纬度 \n :---------------- | :--------------\n -122.419956922531 | 37.7647100858191\n
(注意:如果您想要一个数字而不是包含数值的字符串,请将输出包装在TO_NUMBER
。)
db<> 在这里摆弄
如果您的小数点分隔符通常是,
那么您可以使用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<> 在这里摆弄
这是一个简单的方法:
WITH cteString
AS (SELECT 'POINT(-122.419956922531 37.7647100858191)' AS POINT_STRING FROM DUAL)
SELECT TO_NUMBER(REGEXP_SUBSTR(POINT_STRING, '[+-]?[0-9.]+', 1, 1)) AS LATITUDE,
TO_NUMBER(REGEXP_SUBSTR(POINT_STRING, '[+-]?[0-9.]+', 1, 2)) AS LONGITUDE
FROM cteString
正则表达式[+-]?[0-9.]+
接受由一位或多位数字 0-9 和小数点组成的子字符串,可选地以符号字符开头。 它查找第一个这样的子字符串,将结果子字符串转换为 NUMBER,并将其作为名为 LATITUDE 的字段放入结果集中。 然后查找第二个这样的子字符串,将其转换为 NUMBER,并调用 LONGITUDE。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.