Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle - किसी संख्या का अग्रणी शून्य इसे TO_CHAR में परिवर्तित करते समय गायब क्यों हो जाता है?

मैं अग्रणी या अनुगामी रिक्त स्थान, अवधि, शून्य के बिना संख्याओं को प्रारूपित करने का एक तरीका ढूंढ रहा था (एक से कम संख्याओं के लिए एक अग्रणी शून्य को छोड़कर जो मौजूद होना चाहिए)।

यह निराशाजनक है कि इस तरह के सबसे सामान्य स्वरूपण को Oracle में आसानी से प्राप्त नहीं किया जा सकता है।

यहां तक ​​कि टॉम कायटे ने भी इस तरह के लंबे जटिल समाधान का ही सुझाव दिया था:

case when trunc(x)=x
    then to_char(x, 'FM999999999999999999')
    else to_char(x, 'FM999999999999999.99')
end x

लेकिन मैं छोटा समाधान खोजने में सक्षम था जो केवल एक बार मूल्य का उल्लेख करता है:

rtrim(to_char(x, 'FM999999999999990.99'), '.')

यह सभी संभावित मानों के लिए अपेक्षित कार्य करता है:

select 
    to_char(num, 'FM99.99') wrong_leading_period,
    to_char(num, 'FM90.99') wrong_trailing_period,
    rtrim(to_char(num, 'FM90.99'), '.') correct
from (
  select num from (select 0.25 c1, 0.1 c2, 1.2 c3, 13 c4, -70 c5 from dual)
  unpivot (num for dummy in (c1, c2, c3, c4, c5))
) sampledata;

    | WRONG_LEADING_PERIOD | WRONG_TRAILING_PERIOD | CORRECT |
    |----------------------|-----------------------|---------|
    |                  .25 |                  0.25 |    0.25 |
    |                   .1 |                   0.1 |     0.1 |
    |                  1.2 |                   1.2 |     1.2 |
    |                  13. |                   13. |      13 |
    |                 -70. |                  -70. |     -70 |

अभी भी और भी छोटे समाधान की तलाश है।

कस्टम सहायक फ़ंक्शन के साथ एक छोटा दृष्टिकोण है:

create or replace function str(num in number) return varchar2
as
begin
    return rtrim(to_char(num, 'FM999999999999990.99'), '.');
end;

लेकिन कस्टम pl/sql फ़ंक्शंस में महत्वपूर्ण प्रदर्शन ओवरहेड होता है जो भारी प्रश्नों के लिए उपयुक्त नहीं है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL डेवलपर में CSV…

  2. ओरेकल एसक्यूएल लिस्टैग फ़ंक्शन

  3. एसक्यूएल डेवलपर 4.1.2

  4. किसी तिथि से सप्ताह के दिन का नाम कैसे प्राप्त करें?

  5. त्रुटि:PLS-00428:इस चयन कथन में एक खंड में अपेक्षित है