我有一列nse_credit_rating,其数据类型为VARCHAR2(18)
。
它包含格式为189.00-250.00
的值。
但是某些记录在字符串的末尾具有空值,即,即使与我相关的数据的长度为13(189.00-250.00
),但是length(nse_credit_rating)
返回17作为输出,即末尾有4个空值
当我必须在此列上使用to_number
时,会出现主要问题,因为它包含空值,因此它会返回“ ORA-1722无效数字”。
有没有一种方法可以在出现NULL值之前获取子字符串?
我什至接受了dump(nse_credit_rating)
的输出。
SELECT dump(nse_credit_rating),nse_symbol
FROM nse_security_master
where nse_series='EQ'
and nse_symbol like 'ARVIND'
and nse_series='EQ'
输出:
Typ=1 Len=17: 51,54,55,46,48,48,45,52,52,56,46,53,48,0,0,0,0
这里的0是NULL的数字。
SELECT (nse_credit_rating),nse_symbol
FROM nse_security_master
where nse_series='EQ'
and nse_symbol like 'ARVIND'
and nse_series='EQ'
输出:
367.00-448.50
我尝试使用ascii(substr(nse_credit_rating,-1,1))
,但是只有当我知道最后只有一个字符为Null时,这才有效。但是可以有任意数量的具有NULL的字符。
答案 0 :(得分:4)
使用rtrim()
从字符串末尾删除字符:
SELECT rtrim(nse_credit_rating, chr(0)) as nse_credit_rating
,nse_symbol
FROM nse_security_master
where nse_series='EQ'
and nse_symbol like 'ARVIND'
and nse_series='EQ'
这在Oracle SQL文档中有介绍。 Find out more。 Oracle还支持标准的SQL trim()
函数,但更为冗长:
SELECT trim(trailing chr(0) from nse_credit_rating) as nse_credit_rating
, nse_symbol
FROM nse_security_master
where nse_series='EQ'
and nse_symbol like 'ARVIND'
and nse_series='EQ'
您能告诉我这里的chr(0)吗?
chr()
是用于将ASCII数字转换为字符的功能。因此chr(0)
为我们提供了ASCII空值。
答案 1 :(得分:-1)
简单的方法是使用修剪功能。以下链接的详细信息 https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html
或直接使用rtrim。