【发布时间】:2016-06-09 14:47:08
【问题描述】:
我有一个列字段,它是 varchar,包含数字和字符条目。
MyColumn 将包含这些值,例如:
“1.0”、“AB”、“A1”、“1”、“100”
如果用户在我的应用程序字段中输入“1”,我想进行 varchar 搜索,匹配“1”但也匹配“1.0”。
我不能只做一个 TO_NUMBER,因为有些数据不是数字,我会得到一个“不是数字”的异常。
在强制转换为数字之前,我尝试使用 OR 子句检查 myColumn 是否为数字:
(trim(TRANSLATE(myColumn,'0123456789', ' ')) is null and TO_NUMBER(myColumn) = 1.0)
or myColumn = '1.0'
但我仍然得到 ORA-01722: invalid number,因为 Oracle 不会先检查 AND 子句的一侧。
我试图在限制的两侧“情况下”:
case when trim(TRANSLATE(myColumn,'0123456789', ' ')) is null then TO_NUMBER(myColumn) else myColumn end
= case when trim(TRANSLATE(myColumn,'0123456789', ' ')) is null then 1.0 else '1.0' end;
但我得到 ORA-00932 不一致的数据类型
oracle中有没有办法做条件where子句?
【问题讨论】:
-
您已经找到了不应将不同类型的数据存储在单个列中的确切原因。一切都变得更加复杂查询!
-
我完全同意,但尽管我诅咒了那个数据库,但我的客户让我使用它,他不愿意修改它。
标签: sql oracle numbers conditional