当前位置: 代码迷 >> Oracle管理 >> 很奇怪的substr的有关问题,求解~
  详细解决方案

很奇怪的substr的有关问题,求解~

热度:43   发布时间:2016-04-24 05:35:53.0
很奇怪的substr的问题,求解~~
源数据是这样
SQL code
select z.shiftcode shiftcode from zz_lens_to_q_summary z 1    5F2    5F3    5F4    5F5    5H6    5H7    5H8    5H9    5H


截取一个字符,但出来的结果为空,无论有没有trim。
SQL code
select substr(z.shiftcode,1,1) shiftcode from zz_lens_to_q_summary zselect substr(trim(z.shiftcode),1,1) shiftcode from zz_lens_to_q_summary z结果为空,但不像null,因为null底色不一样。


截取两个字符,显示的结果是一个字符。
SQL code
select substr(trim(z.shiftcode),1,2) shiftcode from zz_lens_to_q_summary z1    52    53    54    55    56    57    58    5

截取一个字符,但后面和另一个字符串组合,截取的字符串出来了,但是后面跟着的‘课’字没了。
SQL code
select substr(z.shiftcode,1,1)||'课' shiftcode from zz_lens_to_q_summary z1    52    53    54    55    56    57    58    59    5


求解~~请问各位高人这是什么原因导致的?

------解决方案--------------------
按照你说的模拟了。一切正常:
create table temp(str varchar2(20));
select a.*,rowid from temp a;
--手动添加数据

select substr(t.str,1,1) from temp t;结果如下:
1 5
2 5
3 5
4 5
5 5
6 5
7 5
8 5
9 5

select substr(trim(t.str),1,2) s from temp t;结果如下:
5F
5F
5F
5F
5H
5H
5H
5H
5H

select substr(trim(t.str),1,2)||'test' s from temp t;结果如下:
5Ftest
5Ftest
5Ftest
5Ftest
5Htest
5Htest
5Htest
5Htest
5Htest
------解决方案--------------------
是不是前面有空白字符TAB
把你截取到的字符用ascii看下编码值。
------解决方案--------------------
select ascii(z.shiftcode),ascii(5) from zz_lens_to_q_summary z

看看结果如何?估计shiftcode前面有隐藏字符
------解决方案--------------------
会不会是tpye是nvarchar2 了,之前我有遇到过,因为类型写错nvarchar2了,结果查看的数据结果位数就不对,但是查看它的长度或是去空格在查,结果都一样,是不对的,最后原因就是类型问题,只是我还没明白为什么会导致这样的错
------解决方案--------------------
查查是不是有不可见的特殊字符
select '|'||z.shiftcode||'|' as shiftcode from zz_lens_to_q_summary z