我在oracle数据库中有一个varchar列,用于存储数字和字符值。
ID : VALUE
01 : 12
02 : 15
03 : 16
04 : 08
05 : Positive
当我在 where 子句中使用数字条件时出现错误。
WHERE VALUE > 10
如何解决这种情况?
如果您使用的是 Oracle 12cR2,那么当转换错误发生时,您可以使用default value
。
SQL>
SQL> CREATE TABLE YOUR_TABLE AS
2 (SELECT '01' AS ID , '12' AS VALUE FROM DUAL UNION ALL
3 SELECT '02', '15' FROM DUAL UNION ALL
4 SELECT '03', '16' FROM DUAL UNION ALL
5 SELECT '04', '08' FROM DUAL UNION ALL
6 SELECT '05', 'Positive' FROM DUAL);
Table created.
SQL>
SQL> SELECT * FROM YOUR_TABLE
2 where TO_NUMBER(value DEFAULT -1 ON CONVERSION ERROR) > 10;
ID VALUE
-- --------
01 12
02 15
03 16
干杯!!
如您所说,您的value
列由字符值组成。
要对其应用正确的数字条件,您必须将其转换为数字:
SELECT *
FROM table
WHERE 10 < CASE value
WHEN 'Positive' THEN null
WHEN 'Negative' THEN null
ELSE TO_NUMBER(value)
END