繁体   English   中英

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 数,我设法将 substring 这些点分成 2 列,但是当我试图将其转换为数字 to_number(column_name) 我有一个错误

  1. 00000 - “无效号码” *原因:指定的号码无效。

这是我的查询,我想在 X 和 Y 列(在 substr 和 trim 函数之前)之前添加 to_number function,但它会导致上述错误)

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;

上述查询的结果

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM