【发布时间】:2010-12-23 07:39:12
【问题描述】:
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'
翻译将所有数字替换为空格,因此如果字段仅包含数字,则修剪将导致 null。然后我使用 decode 语句设置一些代码进行过滤。 n=数字,c=字符。
这似乎在我只运行预览时有效,但当我添加过滤器时出现“无效号码”错误...
and person_uid = 100
-- or
and to_number(person_uid) = 100
我只是不明白发生了什么!它应该过滤掉所有无效数字的记录,100显然是一个数字......
有什么想法吗?非常感谢!
【问题讨论】:
标签: sql oracle oracle10g ora-01722