首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle-TO_NUMBER函数

Oracle-TO_NUMBER函数
EN

Stack Overflow用户
提问于 2017-07-14 07:38:09
回答 3查看 1.3K关注 0票数 0

我的表中有列TEXT_INT,我希望使用TO_NUMBER函数将其转换为十进制。不幸的是我

无效号码或722错误。

我怀疑它里面可能有人物。因此,在下面的查询中发出,但TEXT_INT中没有字母。

代码语言:javascript
复制
SELECT * 
FROM NANTHA_TABLE 
WHERE UPPER(TEXT_INT) != LOWER(TEXT_INT);

请您提供一个解决这个问题或寻找错误数据的方法吗?

EN

回答 3

Stack Overflow用户

发布于 2017-07-14 08:43:11

试试这个:

创建如下功能:

代码语言:javascript
复制
CREATE OR REPLACE function f_invalid_number(number_field in varchar2) return number as
  n_d number;
begin
  n_d := TO_number(number_field);
  return 0;
exception 
  when others then
    return 1;
end;
/

然后,可以检查如下所示的无效数据:

代码语言:javascript
复制
SELECT * 
FROM NANTHA_TABLE 
WHERE f_invalid_number(TEXT_INT) =1
票数 5
EN

Stack Overflow用户

发布于 2017-07-14 08:11:27

此查询可能对您有所帮助。

代码语言:javascript
复制
select your_wrong_col ,
       case
          when trim(TRANSLATE(your_wrong_col ,'0123456789','')) is null
             then 'numeric'
             else 'not_numeric'
       end as your_wrong_col
from YOUR_TABLE
where trim(TRANSLATE(your_wrong_col ,'0123456789','')) is not null;

查找非数字行。

票数 0
EN

Stack Overflow用户

发布于 2017-07-14 08:57:40

请使用下面的查询查找TEXT_INT列中除数字以外的字符的记录。

代码语言:javascript
复制
select  * from NANTHA_TABLE  where NOT REGEXP_LIKE(TEXT_INT,'^[0-9]+$')

如果您期望您的列中有更多的字符串符号应该被认为是有效的,则可以将它们包含在非REGEXP_LIKE条件中,以便这些列也不会出现在查询中。

例如:如果某些值在字符串的开头期待“-”符号:

代码语言:javascript
复制
NOT REGEXP_LIKE(COLUMN_NAME, '^-?[0-9.]+$') "  

哪里

  • “^”开始
  • “?”零或一次发生
  • “+”是更多的事件之一
  • 字符串的“$”结尾

请注意,我知道我上面的查询中的小数即使计算两次也会被接受。为此,我提出了一个不同的解决方案来计算字符串中的小数和抛出错误。如果any1可以将其与REGEXP集成,您将非常欢迎。如何计数小数的小数进行检查。

代码语言:javascript
复制
 LENGTH(COLUMN_NAME) - LENGTH(REPLACE(COLUMN_NAME,'.','')) > 1

要查找有关REGEXP_LIKE的更多细节,请使用以下链接

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45097326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档