Oracle拼接字段时,含字符类型拼接会多出空格?
1.问题
如下图所示,当我们在Oracle中使用||拼接字段时,若含字符char类型,会多出一些奇怪的空格,原因和如何解决呢?
SELECT VEND_NAME || '(' || VEND_COUNTRY || ')'
FROM VENDORS
ORDER BY VEND_NAME;
2.解决
出现这种情况的主要是因为变量的类型为char,因为char类型为固定长度,如果给变量赋值的长度小于声明的长度,Oracle会自动在字符串后面填充空格。
解决方法就是将变量的声明类型改为varchar,这种类型不会填充空格。 最好保持存储过程参数的类型和调用时声明变量的类型一样。
参考:Oracle存储过程中,字符串连接单引号后字符串里出现空格
这里的问题就出在VEND_NAME 和 VEND_COUNTRY 两个变量都是char类型,但是实际的字符长度又不是固定的
那应该如何处理?使用TRIM函数即可!
SELECT TRIM(VEND_NAME) || '(' || TRIM(VEND_COUNTRY) || ')'
FROM VENDORS
ORDER BY VEND_NAME;