2009-10-13 72 views
2

我只是發現了一些......我不知道我會叫它但這裏有雲:甲骨文length()函數返回不正確的值

SELECT part_num, 
     length(trim(part_num)) 
    FROM part_programs 
WHERE rownum <= 10; 

...結果:

PART_NUM  LENGTH(TRIM(PART_NUM)) 
--------------- ---------------------- 
THAB256   8 
THA1256674  11 
THA1256674GU 13 
THA1257141  11 
THA1257141FR 13 
THA1257141FR1 14 
THA1257141TD 13 
THA2002013  11 
THA2002013MI 13 
THA2002013MI1 14 

length()調用返回的整數實際上返回值的1 + realLength。

我不知道從哪裏開始,任何人都在關注光?

回答

5

嘗試通過使用像

Typ=96 Len=6: 79,114,97,99,108,101 

內置的DUMP功能

SELECT part_num, 
     length(trim(part_num)), 
     dump(trim(part_num)) 
    FROM part_programs 
WHERE rownum <= 10; 

這將返回數據從該查詢

SELECT dump('Oracle') from dual 
3

您可能在TRIM()未刪除的那些part_num的末尾有一個不可見的字符(如CR)。

只是一個猜測。 :-)

試着用'['||''括起來。 part_num || ']',然後看看你是否注意到場地兩側有一些額外的空白區域。

+0

這聽起來像是望着場中的細節一個足夠的猜測 - 測試,用已知數據執行插入語句並查看輸出的長度。此外,如果您有UNIX和SQL命令行界面,請嘗試類似於「part_programs | od -xcb中的oracle select part_num」以獲取輸出的十六進制轉儲 - 可能會在列中顯示不友好的字符。 – paxdiablo 2009-10-13 04:35:40

+0

包圍是一個不錯的主意 - 我喜歡這個。爲了得到真正的長度,你可以嘗試如下所示:length(trim(replace(replace(part_num,chr​​(10)),chr(13)))) – 2009-10-13 13:05:45