如何忽略 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.
我有一个数据类型为 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.