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) 我有一个错误
- 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
我在将 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) 我有一个错误
- 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