oracle trim不掉空白字符分享
oracle trim不掉空白字符分享
问题背景:
一个工商注册号,正常的用trim能解决的问题,但是这个case,trim后和肉眼看到的就是不一样就是多了一个字符
分析问题:
为了能问题重现,下面模拟 创造一个12345加上一个特殊字符(假象空白)
select concat('123456',chr(9)) as xx from dual)
1.看看长度
SELECT length(concat('123456',chr(9))) as xx from dual
看到上面里面 心里感觉有空字符(6!=7)
试试 trim的效果
SELECT length(xx),length(trim(xx))
from(
select concat('123456',chr(9)) as xx from dual)
发现trim不掉还是7个长度
Ok我们用dump函数来了解oracle的数据类型存储方式
select dump(xx) from (select concat('123456', chr(9)) as xx from dual)
上面type=1标示 值得类型是VARCHAR2
Len标示该值占用的字节数,是7个长度
49,50,51,52,53,54,9
49,50,51,52,53,54对于ascii码是123456
而9 这个ascii值是 水平定位符号
但是这个9是怎么进去的呢? 是ctrl+tab键加入的!
解决问题:直接更新掉
问题背景:
一个工商注册号,正常的用trim能解决的问题,但是这个case,trim后和肉眼看到的就是不一样就是多了一个字符
分析问题:
为了能问题重现,下面模拟 创造一个12345加上一个特殊字符(假象空白)
select concat('123456',chr(9)) as xx from dual)
1.看看长度
SELECT length(concat('123456',chr(9))) as xx from dual
看到上面里面 心里感觉有空字符(6!=7)
试试 trim的效果
SELECT length(xx),length(trim(xx))
from(
select concat('123456',chr(9)) as xx from dual)
发现trim不掉还是7个长度
Ok我们用dump函数来了解oracle的数据类型存储方式
select dump(xx) from (select concat('123456', chr(9)) as xx from dual)
上面type=1标示 值得类型是VARCHAR2
Len标示该值占用的字节数,是7个长度
49,50,51,52,53,54,9
49,50,51,52,53,54对于ascii码是123456
而9 这个ascii值是 水平定位符号
但是这个9是怎么进去的呢? 是ctrl+tab键加入的!
解决问题:直接更新掉