我的表中有列TEXT_INT,我希望使用TO_NUMBER函数将其转换为十进制。不幸的是我
无效号码或722错误。
我怀疑它里面可能有人物。因此,在下面的查询中发出,但TEXT_INT中没有字母。
SELECT *
FROM NANTHA_TABLE
WHERE UPPER(TEXT_INT) != LOWER(TEXT_INT);请您提供一个解决这个问题或寻找错误数据的方法吗?
发布于 2017-07-14 08:43:11
试试这个:
创建如下功能:
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;
/然后,可以检查如下所示的无效数据:
SELECT *
FROM NANTHA_TABLE
WHERE f_invalid_number(TEXT_INT) =1发布于 2017-07-14 08:11:27
此查询可能对您有所帮助。
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;查找非数字行。
发布于 2017-07-14 08:57:40
请使用下面的查询查找TEXT_INT列中除数字以外的字符的记录。
select * from NANTHA_TABLE where NOT REGEXP_LIKE(TEXT_INT,'^[0-9]+$')如果您期望您的列中有更多的字符串符号应该被认为是有效的,则可以将它们包含在非REGEXP_LIKE条件中,以便这些列也不会出现在查询中。
例如:如果某些值在字符串的开头期待“-”符号:
NOT REGEXP_LIKE(COLUMN_NAME, '^-?[0-9.]+$') " 哪里
请注意,我知道我上面的查询中的小数即使计算两次也会被接受。为此,我提出了一个不同的解决方案来计算字符串中的小数和抛出错误。如果any1可以将其与REGEXP集成,您将非常欢迎。如何计数小数的小数进行检查。
LENGTH(COLUMN_NAME) - LENGTH(REPLACE(COLUMN_NAME,'.','')) > 1要查找有关REGEXP_LIKE的更多细节,请使用以下链接。
https://stackoverflow.com/questions/45097326
复制相似问题