SQL Oracle - 将 varchar2 转换为数字时出现问题

SQL Oracle - problem with converting varchar2 to number

我在将 varchar2 转换为数字时遇到问题,

我有一个列有这样的数据,它是一个varchar2(下面,这个列的几条记录)

POINT(-122.387539744377 37.7604575554348)
POINT(-122.400868982077 37.7985721084626)
POINT(-122.3904285 37.7896767)
POINT(-122.397404909134 37.7875217804563)
POINT(-122.421567589045 37.7941604417493)

我需要计算一些东西,但我需要将这些点分成 X 和 Y 数, 我设法将这些点子串成 2 列,但是当我试图将其转换为数字时 to_number(column_name) 我有一个错误

  1. 00000 - "invalid number" *Cause: The specified number was invalid.

那是我的查询,我想在 X 和 Y 列之前添加 to_number 函数(在 substr 和 trim 函数之前),但结果如上所示错误)

select substr(COLUMN_NAME 7, instr(COLUMN_NAME, ' ')-7)) as X,
trim(trailing ')' from substr(COLUMN_NAME, length(substr(COLUMN_NAME, 0, instr(COLUMN_NAME, ' '))), 50)) as Y
from TABLE_NAME;

results from above query

您可以从只提取数字开始:

select regexp_substr(str, '-?[0-9]+[.][0-9]+', 1, 1),
       regexp_substr(str, '-?[0-9]+[.][0-9]+', 1, 2)
from (select 'POINT(-122.387539744377 37.7604575554348)' as str from dual) x

结果应该适用于 to_number():

select to_number(regexp_substr(str, '-?[0-9]+[.][0-9]+', 1, 1)),
       to_number(regexp_substr(str, '-?[0-9]+[.][0-9]+', 1, 2))
from (select 'POINT(-122.387539744377 37.7604575554348)' as str from dual) x;

Oracle 现在支持错误处理,因此您也可以包括它:

select to_number(regexp_substr(str, '-?[0-9]+[.][0-9]+', 1, 1) default null on conversion error),
       to_number(regexp_substr(str, '-?[0-9]+[.][0-9]+', 1, 2) default null on conversion error)
from (select 'POINT(-122.387539744377 37.7604575554348)' as str from dual) x