在Oracle中转换和比较字段数据类型
我有一个名为Contract_Value的Varchar2字段,其值如下所示在Oracle中转换和比较字段数据类型,oracle,Oracle,我有一个名为Contract_Value的Varchar2字段,其值如下所示 Contract_Value --------------- USD 300,000 EUR 120,215.65 AUD 237,176.39 JPY 31,284.32 SELECT COUNT(*), VALUE FROM (SELECT CASE WHEN REGEXP_REPLACE(A.CONTRACT_VALUE, '[^.0-9]') > 100 THEN 'P
Contract_Value
---------------
USD 300,000
EUR 120,215.65
AUD 237,176.39
JPY 31,284.32
SELECT COUNT(*), VALUE FROM
(SELECT CASE WHEN REGEXP_REPLACE(A.CONTRACT_VALUE, '[^.0-9]') > 100
THEN 'P' ELSE 'F' END AS VALUE FROM DOCUMENTS A)
GROUP BY VALUE;
现在我需要对仪表板应用程序的此字段进行验证,如下所示
Contract_Value
---------------
USD 300,000
EUR 120,215.65
AUD 237,176.39
JPY 31,284.32
SELECT COUNT(*), VALUE FROM
(SELECT CASE WHEN REGEXP_REPLACE(A.CONTRACT_VALUE, '[^.0-9]') > 100
THEN 'P' ELSE 'F' END AS VALUE FROM DOCUMENTS A)
GROUP BY VALUE;
但是它抛出了一个错误,这个无效的数字
原因如下:如上所述,合同值字段为VARCHAR2,我的验证号为>100
我尝试使用CAST和to_NUMBER关键字将数据类型从VARCHAR2更改为NUMBER,但仍然没有成功。修复架构,不要将值与货币存储在一个字符串中。那太可怕了。为值设置一个
number
列,为货币设置一个varchar2
,或者更好地使用指向货币表的外键。对于给定的示例数据,它工作正常。数据库中必须有损坏的数据。类似于两点等。数据库中的NLS\u数字\u字符中的值是多少?