删除多余的空间

时间:2019-05-23 13:04:26

标签: oracle

我有这样的数据:' 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中的前导空格,因此我引入了标点符号来强制表示。

1 个答案:

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

那是六个九,没有看不见的主角。换句话说,填充来自何处不是数据。

这是对另一个问题的答案:(