日期:2014-05-17  浏览次数:20851 次

求解释 sql中字符串连接的问题
select to_char(sysdate, 'YYYYMMDD')||to_char('14', '0099') from dual; 

结果是 20120522 0014 中间会多出一个空格来,这是为什么?



select to_char(sysdate, 'YYYYMMDD')||trim(to_char('14', '0099') ) from dual;

可以修改掉这个问题,说明空格的出现是由 to_char 函数导致的


另外,用select concat ( to_char(sysdate, 'YYYYMMDD'), '0014' ) from dual;

就不会出现这个问题,它的结果是201205220014,正常。这也映证了前面的问题是由to_char导致的


***********

一、请解释现象

二、请问字符串连接有哪些实现方式,需要注意什么?

------解决方案--------------------
加 trim 或者 to_char('14', 'FM0099')

原因,默认补足位数时,前缀会有空格,此时,需要再做一次处理。 或者,直接使用函数提供的 FM 字样。
------解决方案--------------------
直接补充是酱紫得 一般不要空格加fm
------解决方案--------------------
换个函数不就行了
select '|' || to_char('14', '0099'),'|' || lpad('14',4,'0') from dual
'|'||TO_CHAR('14','0099') '|'||LPAD('14',4,'0') 
------------------------- --------------------- 
| 0014 |0014
------解决方案--------------------
2个to_char()连接的时候会产生个空格,