Oracle 10g 数据库。我有一个名为 s_contact 的表。该表有一个名为 person_uid 的字段。此 person_uid 字段是 varchar2,但包含某些行的有效数字和其他行的无效数字。例如,一行的 person_uid 可能是“2-lkjsdf”,而另一行可能是 1234567890。

我只想返回 person_uid 中具有有效数字的行。我正在尝试的 SQL 是...

select person_uid
from s_contact
where decode(trim(translate(person_uid, '1234567890', ' ')), null, 'n', 'c') = 'n'

翻译用空格替换所有数字,这样如果字段只包含数字,修剪将导致空值。然后我使用一个 decode 语句来设置一些要过滤的代码。 n=数字,c=字符。

当我只运行预览时,这似乎有效,但是当我添加...的过滤器时出现“无效数字”错误。
and person_uid = 100
-- or
and to_number(person_uid) = 100

我只是不明白发生了什么!它应该过滤掉所有无效数字的记录,100显然是一个数字......

任何人的想法?不胜感激!

最佳答案

另一种选择是组合谓词:

where case when translate(person_uid, '1234567890', ' ')) is null
  then to_number(person_uid) end = 100

关于sql - 无效号码错误!似乎无法绕过它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1848146/

10-13 05:25