1. Get rid of all advertisements and get unlimited access to documents by upgrading to Premium Membership. Upgrade to Premium Now and also get a Premium Badge!

How to combine NVL & TO_NUMBER

Discussion in 'SQL PL/SQL' started by kapi323, Apr 1, 2013.

  1. kapi323

    kapi323 Guest

    Hi All,
    I was wondering if you could help me with the query presented below.
    Basically I'm trying to combine both NVL and TO_NUMBER functions. Unfourtunatley no matter if I choose
    Code (Text):
    TO_NUMBER(NVL(COLUMN,'5'),'99') as RESULT
    or
    Code (Text):
    NVL (TO_NUMBER(COLUMN,'99'),'5') as RESULT
    the result is the same i.e. null.
    Could you let me know what might be the case here?

    Many thanks in advance
     
  2. zargon

    zargon Community Moderator Forum Guru

    Messages:
    2,347
    Likes Received:
    348
    Trophy Points:
    1,430
    Location:
    Aurora, CO
    I do not see the problem you describe:

    Code (SQL):
    SQL> CREATE TABLE yerpl(
      2          fnorm   NUMBER,
      3          grackle varchar2(10),
      4          yizbo   NUMBER
      5  );
     
    TABLE created.
     
    SQL>
    SQL> BEGIN
      2          FOR i IN 1..50 loop
      3                  IF MOD(i,9) = 0 THEN
      4                          INSERT INTO yerpl
      5                          VALUES(i, '', i*4);
      6                  ELSE
      7                          INSERT INTO yerpl
      8                          VALUES(i, to_char(i), i*4);
      9                  END IF;
     10          END loop;
     11
     12          commit;
     13
     14  END;
     15  /
     
    PL/SQL PROCEDURE successfully completed.
     
    SQL>
    SQL> SELECT to_number(nvl(grackle, '9'), '99'),
      2         nvl(to_number(grackle, '99'), '9')
      3  FROM yerpl;
     
    TO_NUMBER(NVL(GRACKLE,'9'),'99') NVL(TO_NUMBER(GRACKLE,'99'),'9')
    -------------------------------- --------------------------------
                                   1                                1
                                   2                                2
                                   3                                3
                                   4                                4
                                   5                                5
                                   6                                6
                                   7                                7
                                   8                                8
                                   9                                9
                                  10                               10
                                  11                               11
     
    TO_NUMBER(NVL(GRACKLE,'9'),'99') NVL(TO_NUMBER(GRACKLE,'99'),'9')
    -------------------------------- --------------------------------
                                  12                               12
                                  13                               13
                                  14                               14
                                  15                               15
                                  16                               16
                                  17                               17
                                   9                                9
                                  19                               19
                                  20                               20
                                  21                               21
                                  22                               22
     
    TO_NUMBER(NVL(GRACKLE,'9'),'99') NVL(TO_NUMBER(GRACKLE,'99'),'9')
    -------------------------------- --------------------------------
                                  23                               23
                                  24                               24
                                  25                               25
                                  26                               26
                                   9                                9
                                  28                               28
                                  29                               29
                                  30                               30
                                  31                               31
                                  32                               32
                                  33                               33
     
    TO_NUMBER(NVL(GRACKLE,'9'),'99') NVL(TO_NUMBER(GRACKLE,'99'),'9')
    -------------------------------- --------------------------------
                                  34                               34
                                  35                               35
                                   9                                9
                                  37                               37
                                  38                               38
                                  39                               39
                                  40                               40
                                  41                               41
                                  42                               42
                                  43                               43
                                  44                               44
     
    TO_NUMBER(NVL(GRACKLE,'9'),'99') NVL(TO_NUMBER(GRACKLE,'99'),'9')
    -------------------------------- --------------------------------
                                   9                                9
                                  46                               46
                                  47                               47
                                  48                               48
                                  49                               49
                                  50                               50
     
    50 ROWS selected.
     
    SQL>
    Changing the varchar2 definition to char doesn't make any difference:

    Code (SQL):
    SQL> CREATE TABLE yerpl(
      2          fnorm   NUMBER,
      3          grackle CHAR(10),
      4          yizbo   NUMBER
      5  );
     
    TABLE created.
     
    SQL>
    SQL> BEGIN
      2          FOR i IN 1..50 loop
      3                  IF MOD(i,9) = 0 THEN
      4                          INSERT INTO yerpl
      5                          VALUES(i, NULL, i*4);
      6                  ELSE
      7                          INSERT INTO yerpl
      8                          VALUES(i, to_char(i), i*4);
      9                  END IF;
     10          END loop;
     11
     12          commit;
     13
     14  END;
     15  /
     
    PL/SQL PROCEDURE successfully completed.
     
    SQL>
    SQL> SELECT to_number(nvl(grackle, '9')),
      2         nvl(to_number(grackle), '9')
      3  FROM yerpl;
     
    TO_NUMBER(NVL(GRACKLE,'9')) NVL(TO_NUMBER(GRACKLE),'9')
    --------------------------- ---------------------------
                              1                           1
                              2                           2
                              3                           3
                              4                           4
                              5                           5
                              6                           6
                              7                           7
                              8                           8
                              9                           9
                             10                          10
                             11                          11
     
    TO_NUMBER(NVL(GRACKLE,'9')) NVL(TO_NUMBER(GRACKLE),'9')
    --------------------------- ---------------------------
                             12                          12
                             13                          13
                             14                          14
                             15                          15
                             16                          16
                             17                          17
                              9                           9
                             19                          19
                             20                          20
                             21                          21
                             22                          22
     
    TO_NUMBER(NVL(GRACKLE,'9')) NVL(TO_NUMBER(GRACKLE),'9')
    --------------------------- ---------------------------
                             23                          23
                             24                          24
                             25                          25
                             26                          26
                              9                           9
                             28                          28
                             29                          29
                             30                          30
                             31                          31
                             32                          32
                             33                          33
     
    TO_NUMBER(NVL(GRACKLE,'9')) NVL(TO_NUMBER(GRACKLE),'9')
    --------------------------- ---------------------------
                             34                          34
                             35                          35
                              9                           9
                             37                          37
                             38                          38
                             39                          39
                             40                          40
                             41                          41
                             42                          42
                             43                          43
                             44                          44
     
    TO_NUMBER(NVL(GRACKLE,'9')) NVL(TO_NUMBER(GRACKLE),'9')
    --------------------------- ---------------------------
                              9                           9
                             46                          46
                             47                          47
                             48                          48
                             49                          49
                             50                          50
     
    50 ROWS selected.
     
    SQL>
    Please post the table definition, the table data and the results you receive. We can't help you without that information.