2016-03-01 52 views
0

我正在做一个很简单的查询(RPAD):RPAD不能正常工作

SELECT 
RPAD(COMERCIO,40,' ') 
FROM 
SIEBEL.transacciones_acumulaciones_vm 
WHERE  ESTADO = 'Procesado' 
AND NUMERO in ('20232385', 
'20225479', 
'20265516'); 

输出:

RESTAURANTE EL QUINC     (lenght 40) 
MC DONALD (lenght 9) 
CARREFOUR EXPRESS-PA     (lenght 40) 

这里的主要问题是,每次1.000.000行差不多来自特定列的文字不会添加该空格。

+0

您使用的是Oracle还是MySQL?无论哪种方式,我都可以向你保证RPAD函数不是你的问题,而是你正在撤回的数据(否则如果你确信它是函数,那么你应该尝试将这个错误报告给相应的RDBMS供应商) 。数据最初是从文件加载的吗?如果是这样的话,你可能会从每一百万行中处理不佳的标题字符中挑选一个空间,这是你的查询字段“COMERCIO”字段。在使用RPAD之前尝试使用TRIM或者通过并清理数据。 – DanK

回答

1

您的数据可能含有隐藏字符。在unix中,我使用cat命令查看平面文件:

$ cat -vet my-file ...显示扩展字符和非打印字符。 (例如,一个“标签”显示为输出^T

与甲骨文,这里的文本字段强调非打印字符的一种方法:

select replace(regexp_replace(COMERCIO,'[^[:print:]]', '!ACK!'),' ','.') as CAT_VET 
from SIEBEL.transacciones_acumulaciones 
where ESTADO = 'Procesado' 
AND NUMERO in ('20232385', 
    '20225479', 
    '20265516'); 

...这将显示COMERCIO值,用带句点字符的标记!ACK!替换任何非打印字符。

这并不能告诉你哪些字符是问题,但它确实提供了问题的指导/验证。