我正在研究一个我无法弄清楚的问题,但我相信我今天取得了一些进展。在where子句中,有以下代码:
AND to_number(REPLACE(TRANSLATE ( decode( INSTR(hra_ans.answer_text, '.',1 , 2), 0 , UPPER(hra_ans.answer_text) , 0),'ABCDEFGHIJKLMNOPQURSTWVXYZ+<>:',' '), ' ','')) >= 10
现在,此hra_ans.answer_text列可以包含“&gt;”中的任何内容将'&gt; 15'改为'13 .68'至'无结果'至'1.2.3.4'等。无效数字错误仅间歇发生,而不是每次都发生。我已经尝试使用'[^ 0-9。]'的表达式替换Translate和Regexp_Replace,但这也无法解决问题。我在SO上找到了这个:
Here is a similar question I stumbled accross.
在该帖子中,似乎可能导致错误,因为没有明确的操作顺序。我可能遇到同样的情况吗?如果没有,否则可能会导致这种行为?
谢谢!
答案 0 :(得分:1)
如果您可以声明一个新函数,最简单的选项可能是做
之类的事情CREATE FUNCTION my_to_number( p_str IN VARCHAR2 )
RETURN NUMBER
IS
l_num NUMBER;
BEGIN
BEGIN
l_num := to_number( p_str );
EXCEPTION
WHEN others THEN
l_num := NULL;
END;
RETURN l_num;
END my_to_number;
然后在查询中使用它
AND my_to_number( hra_ans.answer_text ) >= 10
我会打赌,ANSWER_TEXT
列中的数据没有被字符串处理函数转换为有效数字。