oracle 填入编号,sql – 带填充模式的Oracle to_char格式编号(FM0000)
您的格式模型仍然必須允許值的符號(hào).沒有辦法向TO_CHAR()表明它永遠(yuǎn)不會(huì)是負(fù)數(shù)(如果你的值實(shí)際上是這種情況).即使使用4位數(shù)字,格式允許允許五個(gè)字符,您可以從列標(biāo)題中看到:
SQL> SELECT TO_CHAR(1234, 'FM0000') FROM DUAL;
TO_CH
-----
1234
請(qǐng)注意,列標(biāo)題是TO_CH,它是五??個(gè)字符,而不是四個(gè)字符.如果您有一個(gè)負(fù)數(shù)(如Florin建議的那樣),您需要額外的空間:
SQL> SELECT TO_CHAR(-1234, 'FM0000') FROM DUAL;
TO_CH
-----
-1234
如果沒有FM修飾符,則返回的字符串中的前導(dǎo)空格為正值,因此LENGTH(TO_CHAR(1234,’0000′))為5但LENGTH(TO_CHAR(1234,’FM0000′))為4,因?yàn)榍皩?dǎo)空格(通常使列中的值右對(duì)齊)被抑制.如果為負(fù)值,則返回字符串的長(zhǎng)度為5.格式模型確定返回的數(shù)據(jù)類型是varchar2(5)以允許符號(hào),即使您知道永遠(yuǎn)不會(huì)有負(fù)值 – 格式模型也沒有任何方法可以反映這一點(diǎn).
如果您強(qiáng)制顯示符號(hào),也可以使用正值查看它:
SQL> SELECT TO_CHAR(1234, 'FMS0000') FROM DUAL;
TO_CH
-----
+1234
在TO_CHAR調(diào)用中,您無(wú)法做任何事情.作為RPAD解決方法的替代方法,您可以使用SUBSTR僅獲取格式化字符串的最后四個(gè)字符:
SQL> SELECT SUBSTR(TO_CHAR(12345, 'FM0000'), -4) FROM DUAL
SUBSTR(TO_CHAR(1
----------------
####
但如果你確實(shí)有負(fù)值,你就會(huì)失去這個(gè)標(biāo)志:
SQL> SELECT SUBSTR(TO_CHAR(-1234, 'FM0000'), -4) FROM DUAL
SUBSTR(TO_CHAR(-
----------------
1234
使用你的RPAD你保持標(biāo)志但丟失了第四個(gè)有效數(shù)字:
SQL> SELECT RPAD(TO_CHAR(-1234, 'FM0000'), 4) FROM DUAL
RPAD(TO_CHAR(-12
----------------
-123
這也不好.你可能不必處理負(fù)數(shù);但如果您處理的數(shù)字大于預(yù)期(即,當(dāng)您只期望< = 9999時(shí),您得到的數(shù)字> = 10000)那么我不確定您是否可以確定您不會(huì)看到(無(wú)效?)在某些時(shí)候的負(fù)數(shù).這似乎是一個(gè)數(shù)據(jù)問(wèn)題,而不是格式問(wèn)題,無(wú)論如何在某種程度上. 根據(jù)你對(duì)Ollie的評(píng)論,對(duì)于未來(lái)的代碼維護(hù)者來(lái)說(shuō),另一種可能更明確和更明顯的方法是在CASE中拼寫出來(lái):
SELECT CASE WHEN n BETWEEN 0 AND 9999 THEN TO_CHAR(n, 'FM0000') ELSE '####' END FROM DUAL
如果你愿意,這也允許你將字符串列保留為null或使用其他一些魔術(shù)值而不是####.
另一種修改價(jià)值的方法,也可能更清楚,就是使用CAST:
SQL> SELECT CAST(TO_CHAR(12345, 'FM0000') AS VARCHAR2(4)) FROM DUAL;
CAST
----
####
總結(jié)
以上是生活随笔為你收集整理的oracle 填入编号,sql – 带填充模式的Oracle to_char格式编号(FM0000)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: plsql连不上oracle6,是否遇到
- 下一篇: linux获取ad用户列表,Powers