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

How to ignore Null values at the end of a string in Oracle?

我有一个数据类型为 VARCHAR2(18) 的列 nse_credit_rating。 它包含 189.00-250.00 形式的值。 但是有些记录在字符串的末尾有空值,即即使与我相关的数据长度为 13 (189.00-250.00) 但 length(nse_credit_rating) returns 17 作为输出,即有 4 个 null最后的值。

当我必须在此列上使用 to_number 时出现主要问题,它 returns "ORA-1722 invalid number" 因为它包含空值。

有什么方法可以在出现 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 的 ascii。

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。

最简单的方法是使用trim函数。详细信息如下 link https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html

或直接使用rtrim

使用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'

Can you tell me what chr(0) does here?

chr()是一个将ASCII码转成字符的函数。所以 chr(0) 给我们 ASCII null.