我有这样的数据:' 999999'
。我想删除多余的空间或数字前的所有内容。
在我的表中,数据为varchar2类型。我尝试过replace(),trim(),ltrim(),replace(),但是没有任何效果。仍然,当我从SQL Developer中下载CSV文件时,它仍显示这样的数据-, 9999999,
(数字前有空格)。但是我不希望空格或数字前出现任何东西。
我尝试过:
UPDATE tablename SET column name= ltrim(column name) where abc= '13712';
请让我知道解决方法。
当我将数据传递到dump()
时,我得到以下输出:
Typ=1 Len=6: 57,57,57,57,57,57
编者注:即使我们使用反引号,降价也会抑制999999
中的前导空格,因此我引入了标点符号来强制表示。
答案 0 :(得分:4)
前导字符不是空格。如果它们是未经修饰的ltrim()
,则将其删除。所以他们必须我别的东西。为了找出答案,我们可以使用dump()
来显示字符串中所有字符的ascii值。
剧透警报:在下面的示例中,它们将变成标签:)
with tab_name as (
select chr(11)||chr(11)||'56789' as column_name from dual
)
select dump(column_name)
from tab_name
/
给我们
Typ=1 Len=7: 11,11,53,54,55,56,57
因此,现在我们知道我们要处理的内容,可以使用带有附加参数的ltrim()
来删除前导制表符。因此,请确保将其转换为数字:
with tab_name as (
select chr(11)||chr(11)||'56789' as column_name from dual
)
select to_number(ltrim(column_name, chr(11)))
from tab_name
/
嗯,在我写完这篇文章后,OP发布了他们的dump()
查询的输出:
Typ=1 Len=6: 57,57,57,57,57,57
那是六个九,没有看不见的主角。换句话说,填充来自何处不是数据。
这是对另一个问题的答案:(