簡體   English   中英

為什么to_char()給出的結果為負數?

[英]why is to_char() giving a negative results to a positive number?

我有下面的sql代碼,它給出查詢后打印的輸出。 DSPNSD_NDC是一個可變字符(11)。 為什么在TO_CHAR列中得到否定結果?

SELECT TO_NUMBER(DECODE(TRANS.DSPNSD_NDC,'',NULL,TRANS.DSPNSD_NDC),99999999999),
               TO_CHAR(TO_NUMBER(DECODE(TRANS.DSPNSD_NDC,'',NULL,TRANS.DSPNSD_NDC),99999999999),'FM00000000000'),
               DSPNSD_NDC 
        FROM SRW_NDW_TRANS TRANS;

輸出:

TO_NUMBER     TO_CHAR        DSPNSD_NDC
68180021209 -00539455527    68180021209
68382070201 -00337406535    68382070201
10702001801  02112067209    10702001801
50111045601 -01428561951    50111045601

這絕對是一些內部溢出的問題

(68180021209 modulo 2**31 ) + 00539455527 = 2**31

但是,為什么要從varchar轉換為number然后又返回varchar? 只是添加前導零?

Netezza支持LPAD:

LPAD(TRANS.DSPNSD_NDC, 11, '0')

我認為答案是to_char()不處理大整數,因此存在整數溢出問題。

一種解決方案是僅使用cast()

cast(DECODE(TRANS.DSPNSD_NDC,'',NULL,TRANS.DSPNSD_NDC) as char(11))

但是,您隨后需要將數字填充為零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM