很奇怪的substr的问题,求解~~
源数据是这样
SQL code
select z.shiftcode shiftcode from zz_lens_to_q_summary z
1 5F
2 5F
3 5F
4 5F
5 5H
6 5H
7 5H
8 5H
9 5H
截取一个字符,但出来的结果为空,无论有没有trim。
SQL code
select substr(z.shiftcode,1,1) shiftcode from zz_lens_to_q_summary z
select 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 z
1 5
2 5
3 5
4 5
5 5
6 5
7 5
8 5
截取一个字符,但后面和另一个字符串组合,截取的字符串出来了,但是后面跟着的‘课’字没了。
SQL code
select substr(z.shiftcode,1,1)||'课' shiftcode from zz_lens_to_q_summary z
1 5
2 5
3 5
4 5
5 5
6 5
7 5
8 5
9 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