如何在Oracle中忽略字符串末尾的Null值?

时间:2019-04-15 12:50:21

标签: sql oracle nul

我有一列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的字符。

2 个答案:

答案 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