sql - 无效号码错误!似乎无法绕过它

标签 sql oracle oracle10g ora-01722

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/

相关文章:

sql - 创建在两个表上运行的触发器

java - 在 JDBC 中获取列名

sql - 带有子查询的 Oracle 检查约束 [练习]

mysql - 获取2列的最大值和数字最大的行的全行信息

php - 如何解决ORA-12154 : TNS error when using PHP OCI8 oci_connect in Azure

Oracle 日期比较因 DST 而损坏

Oracle 用常量创建复合主键

sql - Oracle SQL 查询 : how to use count

VBA/Excel : Not accepting SQL subclauses

Oracle 开发环境许可证?