2016-03-01 49 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!替換任何非打印字符。

這並不能告訴你哪些字符是問題,但它確實提供了問題的指導/驗證。