TO_NUMBER

Hi all

I have the following:

Select TO_NUMBER (MYSTRING))

Select to_char (sysdate - (sysdate - 14.5232)) as DOUBLE MYSTRING)

TO_NUMBER (MYSTRING)

-------------------

14,5231944

But I want to have only:

TO_NUMBER (MYSTRING)

-------------------

14.52

Then:

Select TO_NUMBER (MYSTRING, ' 99.99 '))

Select to_char (sysdate - (sysdate - 14.5232)) as DOUBLE MYSTRING)

01722 00000 - "invalid number."

What's wrong?

Thank you.

(on the other hand: on what is the problem? >: maybe calling TO_NUMBER (TO_CHAR (a_number))? ;-))

You have a certain number (SYSDATE - (SYSDATE - 14.5232)), without having to go to a char and then return to the number if your goal is just to see 2 decimal places... You can use the ROUND function (or TRUNC, choose):

SELECT ROUND (SYSDATE - (SYSDATE - 14.5232), 2) FROM dual;

Best regards

Bruno

)

Tags: Database

Similar Questions

  • To_Number fails because the number not valid

    I have a value which is unfortunately in a field of varchar (50) free form text and I'm updating a table which is a numeric field.  The data could be anything.  From my research, it sounds like its values as 18000, or $20,000, $23 000,00, $28 000,00 or or $35,000.0000.

    I tried the command To_Number and it failed.

    I made a function replace and stripped dollar signs and commas and the still empty spaces and as a last resort even stripped periods just to try to put incorrect data, perhaps thinking that the free text field has had two periods in it.

    I have an IS_NUMBER function and when I run the field through here, he said they are all numbers, but when I update it does not say that it is an invalid number.

    I have a long msft sql dba, but Oracle is all new to me.

    BEGIN

    merge into wh_cust_act_brand t

    a_l'_aide_de)

    Select cust_no, activ_no, ss. SETTING_VALUE

    OF GMSTG. STG_service_settings ss

    WHERE ss.setting_id = 'lifeline_qualifying_income. '

    and ss.setting_value is not null

    and not exists (select 1

    of wh_cust_act_brand c

    where c.cust_no = ss.cust_no

    and c.activ_no = ss.activ_no

    and c.lifeline_qualifying_income = ss.setting_value

    (q))

    WE (t.cust_no = q.cust_no and t.activ_no = q.activ_no)

    When matched then

    game update

    t.update_date = sysdate,

    I tried these:

    -t.lifeline_qualifying_income = q.setting_value

    -t.lifeline_qualifying_income = replace (replace (replace (replace (q.setting_value, ' $', "),",","), '-', "), ' ',");

    -t.lifeline_qualifying_income = TO_NUMBER (replace (replace (replace (replace (q.setting_value, ' $', "),",","), '-', "), ' ',"), ' $9,999,999.99999999 ' ");

    -t.lifeline_qualifying_income = cast (regexp_replace (q.setting_value, "[^ 0-9.]")) +', ") under the number);

    -t.lifeline_qualifying_income = regexp_replace (q.setting_value, "[^ 0-9] +'," ");

    t.lifeline_qualifying_income =

    (CASE

    WHEN substr (q.setting_value, 1, 1) = "$" then to_number (substr (replace (q.setting_value, ',', "), length (q.setting_value)-1, 2)," 9999999.99999999' ")

    WHEN substr (q.setting_value, 1, 1) <>' $' then to_number (replace (q.setting_value, ',' ")," 999999.9999' ")

    -ANOTHER '0'

    (END);

    EXCEPTION

    WHILE OTHERS THEN

    raise_application_error (-20001,' an error has occurred - ' |) SQLCODE |' - ERROR - ' | SQLERRM);

    END;

    OK, I finally got to work:

    I think that the problem was way up above in code at line 3 and 11, I compared a number in a field of type varchar field, once I fixed that Oracle was much happier.

    merge into wh_cust_act_brand t

    a_l'_aide_de)

    Select cust_no, activ_no, to_number (replace (replace (trim (setting_value), ' $', "),",",")) setting_value

    OF GMSTG. STG_service_settings ss

    WHERE ss.setting_id = 'lifeline_qualifying_income. '

    and ss.setting_value is not null

    and not exists (select 1

    of wh_cust_act_brand c

    where c.cust_no = ss.cust_no

    and c.activ_no = ss.activ_no

    and c.lifeline_qualifying_income = to_number (replace (replace (trim (setting_value), ' $', "),",","))

    (q))

    WE (t.cust_no = q.cust_no and t.activ_no = q.activ_no)

    When matched then

    game update

    t.update_date = sysdate,

    t.lifeline_qualifying_income = to_number (replace (replace (trim (setting_value), ' $', "),",","));

  • TO_NUMBER ('1 ', 'th')

    Hi all

    Please let me know how to generate an Ordinal number using sql, for example when I run the following sql code, it gives an error:

    Select to_number ('1 ', 'th') twice;

    Noor ul Huda

    Hello

    It's something that Oracle is very UN-intuitively.

    an' th' is not an element of fomatting se; It is a suffix, that you can use after another element of formatting and only when converting from a DATE to a strring.

    For example:

    SELECT TO_CHAR (SYSDATE, 'DD') LIKE dd

    , TO_CHAR (SYSDATE, "DDth") AS ddth

    DOUBLE;

    product:

    DD DDTH

    -- ----

    17 17

    Using "DDth", you can get as high as 31 numbers.

    Using 'YYYYth', you can get as high as 9999th numbers

    Using 'J', you can get kinds as high as 5373484th.

    In all cases, you must convert a DATE, so you may have to call TO_DATE, just so that you can call TO_CHAR, like this:

    SELECT ename

    sal

    , TO_CHAR (TO_DATE (sal, 'J')

    , "fmJTH".

    ) AS jth_sal

    FROM scott.emp

    ;

    Output:

    ENAME SAL JTH_SAL

    ---------- ---------- --------

    SMITH 800 800TH

    ALLEN 1600 1600E

    WARD 1250 1250

    JONES 2975 2975TH

    MARTIN 1250 1250

    BLAKE 2850 2850TH

    CLARK 2450 2450EME

    SCOTT 3000 3000E

    KING 5000 5000TH

    TURNER 1500 1500TH

    1100 1100 ADAMS

    JAMES 950 950TH

    FORD 3000 3000E

    MILLER 1300 1300E

  • TO_NUMBER FUNCTION ERROR

    Hello

    Select to_number ('1500000',' $99 999, 99.99') of double; It displays the number not valid error, why?

    How does it work?

    Hello

    2611797 wrote:

    Hello

    Select to_number ('1500000',' $99 999, 99.99') of double; It displays the number not valid error, why?

    How does it work?

    The 1st argument does not have the reason for the 2nd argument.  The argument is 2, the channel will start with a sign of $; Since '1500000' does not start with a sign $, is not a valid string in this model.

    It goes the same for commas.  If you say TO_NUMBER 1 argument contains commas between groups of numbers, you better provide commas between groups of numbers.

  • Regexp_like instead of to_number function

    All good Dale

    I'm writing a query to check if something is a number. So far, I've had this

    Select 1

    of the double

    where regexp_like (1.1, ' ^ [--------+---------]?) [ 0-9] * \. ? [0-9]+$');

    But it won't work for floating numbers and I don't know why.

    [\+\-]?   -This should mean corresponds to + or - o or 1 times

    [0-9] *-match number 0 or more times

    \.?       -Time match 0 or 1 point

    [0-9] + -match 1 or more times number


    Best regards

    Igor

    'E' is also part of the numbers, if you use scientific notation...

    SQL > select 1.3E18 from double;

    1.3E18
    ----------
    1.3000E + 18

    So, is it not better to use "TO_NUMBER" which takes into account all the numbers rather than trying to build your own?

    Why reinvent the wheel?

  • Explain the (), TO_DATE (), () with examples TO_NUMBER TO_CHAR

    Hi all

    I little bit on (), TO_DATE (), () TO_NUMBER TO_CHAR confusion.

    Can you please explain when to use which works with examples.

    Thank you and best regards,

    Format patterns

  • TO_NUMBER and NLS settings... do not understand

    I am trying to get my head around the use of format and with TO_NUMBER NLS settings and TBH am at my wits end. So I'll start with something simple. I never took the trouble or should bother with the third parameter "nls params" for NLS settings and now I have I really regret.

    This works even if the '. 'and',' characters are not in their normal positions...

    SQL > SELECT TO_NUMBER ('17.000,23 ', '999G999D99', ' nls_numeric_characters = ",".) ') FROM DUAL;

    TO_NUMBER('17.000,23','999G999D99','NLS_NUMERIC_CHARACTERS='',.''')

    -------------------------------------------------------------------

    17000.2

    So why this version throws an error?   (I should say all that I changed is the order of ', 'and'.' in the string)

    SQL > SELECT TO_NUMBER (' 17,000.23', '999G999D99', ' nls_numeric_characters = ",". ' ") FROM DUAL;

    SELECT TO_NUMBER (' 17,000.23', '999G999D99', ' nls_numeric_characters = ",". ' ") FROM DUAL

    *

    ERROR on line 1:

    ORA-01722: invalid number

    Is also the order of the characters question here ' nls_numeric_characters = ",". ')  ?

    I'm sorry but when marking code in my spl * more CLI and try to paste here as "insert SQL" lines eventually lack or conditioning or line spacing change seconds later. I found myself with a single line crushed on the other and the missing lines are visible once highlighted!

    Is also the order of the characters question here ' nls_numeric_characters = ",". ')  ?

    Of course, the order is important. How can you say the meaning of each character if it wasn't?

    First character is the decimal separator, and the second is the thousands separator.

    Your first request is OK because the decimal separator used in the input string is '.' and the thousands separator is ", which exactly match the characters specified in the parameter NLS.

    The second query failed for the opposite reason.

  • Word key missing in to_number conversion in the SQL statement select error

    ORA-00905: lack keyword for the below SQL statement error. It should be of to_number (m.EQUIP_SUB_CLASS_ID, '9999')
    between 3800 and the 3699 where Clause. Is that what I miss in the SQL below?

    SELECT  M.EQUIP_NO,M.EQUIP_CLASS_ID, M.EQUIP_DESCR,M.ORG_ID
      from  MAMIS.EQUIP M
     where M.EQUIP_NO in  (  SELECT  M.EQUIP_NO  from  MAMIS.EQUIP M, MAMIS.ORG O 
    where upper(M.ORG_ID) like upper(O.ORG_ID) 
    and length(replace(translate(M.EQUIP_SUB_CLASS_ID, '0123456789', '000000000'), '0')) is null
    and upper(M.fleet_status) like 'ACTIVE'  
    and upper(M.ORG_ID) not like 'NA'  
    and to_number(m.EQUIP_SUB_CLASS_ID , '9999') 
    between 3699 and 3800  )

    Hello

    I don't see obvious errors.

    Whenever you have a problem, please post a full test script that people can run to recreate the problem and test their ideas. Include CREATE TABLE and INSERT statements for all of the tables involved and the results desired from these data. Format your code so people can read and understand.
    See the FAQ forum {message identifier: = 9360002}

    I saw a couple of things you need to know about Oracle, but none of them would cause an error "Missing key word".

    There is no point in using the LIKE operator if you do use wildcards. For example

    upper (M.fleet_status)      like 'ACTIVE'  
    

    is slower than, but otherwise equivalent to

    upper (M.fleet_status)      = 'ACTIVE'  
    

    What are you trying to do here?

    length ( replace ( translate ( M.EQUIP_SUB_CLASS_ID
                                , '0123456789'
                        , '000000000'
                        )
               , '0'
               )
           )               is null
    

    Want to see if m.equip_sub_class_id consists only of numbers, from ' 0 'to 9'?
    If so, you can simply say

    TRANSLATE ( m.equip_sub_class_id
           , 'X0123456789'
           , 'X'
           )          IS NULL
    

    Depending on your front end, you may need a sem, i-colon (;) the end of your query.

  • To_Number fast formula conversion

    Hi all

    I do a quick calculation of simple formula where I'm trying to convert the date of return to number.
    It start error. But what I am doing wrong. I'm trying to convert the returned date value of number.



    ***
    APP-FF-33983: type mismatch in parameter for the function "TO_NUMBER" on line 15

    Cause: The user has specified a function whose name was recognized but whose types of parameters are not all versions known to the service.

    Action: Please verify that the variables or literals passed to the function are types appropriate for the function definition. ***

    This is my code

    ----------------------------------------------------
    IS the DEFAULT for EMP_TERM_DATE '' 1-JAN-4712 (date)
    DEFAULT value FOR PAY_PROC_PERIOD_START_DATE IS 1 January 1951"(date)
    Value by DEFAULT FOR PAY_PROC_PERIOD_END_DATE IS 31-DEC-4712' (date)
    DEFAULT for C_Allowance_Balance_ASG_YTD is 0
    DEFAULT for L_paid_amount IS 0
    DEFAULT for Day_amount IS 0
    DEFAULT for days_deduction IS 0
    DEFAULT for deducted_amount IS 0
    Is the DEFAULT for L_last_day '' 31-JAN-4712 (date)

    L_last_day = TO_DATE (' 31 - DEC-'+ TO_CHAR (PAY_PROC_PERIOD_END_DATE, 'YYYY'), 'DD-MON-YYYY')

    Day_amount = (C_Allowance_Balance_ASG_YTD) / 365

    / * 15 * / days_deduction = to_number(l_last_day-EMP_TERM_DATE)
    deducted_amount = days_deduction * days_amount

    return deducted_amount

    Hello

    Try this once.

    days_deduction = days_between (L_last_day, EMP_TERM_DATE)

    Kind regards
    Aneesh N

  • Combination to_number To_char

    Hi all

    I need to do the following

    Code:
    Select ´a´ * 3 double;

    The result should be ´aaa´

    I ve tried this

    Code:
    Select to_char (to_number (´a´)) * 3) double;

    This doesn´t works correctly.

    Can someone help me?

    and what happens if I need to do:
    Code:
    Select (´name´) * 2 double;

    where the result is to be ´namename´

    Hope you can help out me.

    Thank you
    Kiekster

    Hello

    Welcome to the forum!

    You can do something like this:

    SELECT     ename
    ,     deptno
    ,     RPAD ( ename
              , LENGTH (ename) * deptno / 10
              , ename
              )          AS ename_rep
    FROM     scott.emp
    ;
    

    Output:

    ENAME          DEPTNO ENAME_REP
    ---------- ---------- ----------------------------------------
    SMITH              20 SMITHSMITH
    ALLEN              30 ALLENALLENALLEN
    WARD               30 WARDWARDWARD
    JONES              20 JONESJONES
    MARTIN             30 MARTINMARTINMARTIN
    BLAKE              30 BLAKEBLAKEBLAKE
    CLARK              10 CLARK
    SCOTT              20 SCOTTSCOTT
    KING               10 KING
    TURNER             30 TURNERTURNERTURNER
    ADAMS              20 ADAMSADAMS
    JAMES              30 JAMESJAMESJAMES
    FORD               20 FORDFORD
    MILLER             10 MILLER
    

    As you can see, ename_rep is repeated ename. Everyone with deptno = 10 a name repeated only once, everyone with deptno = 20 a their name repeated 2 times and everyone with deptno = 30 a their name repeated 3 times.

    Published by: Frank Kulash on October 22, 2012 15:01
    Example changed to use scott.emp

    Published by: Frank Kulash on October 22, 2012 15:06

  • To_Number doubt

    Hi once again, EMSI,
    I have this doubt, always on implicit conversions... (!!!!)
    I read the book SQL Fundamentals 1 corrected to prepare for the exam, at the end of each chapter there are a few questions to prove your understanding and a few pages later he has the answers. There is this question:

    What value is returned after executing the next statement?

    SELECT TO_NUMBER (1234.49, '999999.9') FROM DUAL;

    This query generates an error because "education is trying to convert a number using a mask of incompatible format. "If the expression was TO_NUMBER (1234,49, '999999.99') number would return.
    My question is: WHY?
    TO_NUMBER function gets a string as the first parameter, then it implicitly converts 1234.49 to '1234.49', shouldn't around it up to the first decimal digit and 1234.5 back?
    just as would a to_char?

    Thank you

    Paolo

    Hi, Paolo.

    955202 wrote:
    ... This query generates an error because "education is trying to convert a number using a mask of incompatible format. "If the expression was TO_NUMBER (1234,49, '999999.99') number would return.
    My question is: WHY?
    TO_NUMBER function gets a string as the first parameter, then it implicitly converts 1234.49 to "1234.49."

    Exactly! If you use the wrong data type, Oracle will do an implicit conversion, when possible.

    shouldn't it round to the first decimal digit and 1234.5 back?
    just as would a to_char?

    To_char rounds the number, as you said, but only if you explicitly tell him how much of numbers that you want after the comma, like this:

    SELECT     TO_CHAR (1234.49, '999999.9')     AS explicit_result
    FROM     dual;
    

    Output:

    EXPLICIT_RESULT
    ---------------
       1234.5
    

    But you're not explictly tell how many digits you want. You're not explictly calling TO_CHAR at all; you call it implictly, as if your were doing that:

    SELECT     TO_CHAR ('1234.49')          AS implicit_result
    FROM     dual;
    

    Output:

    IMPLICIT_RESULT
    ---------------
    1234.49
    
  • SEPARATE returns an error on column with TO_NUMBER

    Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
    PL/SQL Release 10.2.0.5.0 - Production
    CORE Production 10.2.0.5.0
    AMT for 64-bit Windows: Version 10.2.0.5.0 - Production
    NLSRTL Version 10.2.0.5.0 - Production

    Hello

    I have a question like this that works very well and returns x amount of records;
    select to_number(col_3) plot_number
      from user_recovery_external;
    I have a separate list of values, so I add separate like that and he now throws an error.
    select distinct to_number(col_3) plot_number
      from user_recovery_external;
    
    Error starting at line 15 in command:
    select distinct to_number(col_3) plot_number
      from user_recovery_external
    Error report:
    SQL Error: ORA-29913: error in executing ODCIEXTTABLEFETCH callout
    ORA-01722: invalid number
    ORA-06512: at "SYS.ORACLE_LOADER", line 52
    29913. 00000 -  "error in executing %s callout"
    *Cause:    The execution of the specified callout caused an error.
    *Action:   Examine the error messages take appropriate action.
    What I am doing wrong?

    Ben

    There are some invalid numbers in your file.

    Your first query reads only first few records of the file, where there is no 'invalid numbers "(in the first few records)

    When you use DISTINCT, the query will read the entire file to find unique records.

  • ORA-06502 use TO_NUMBER TO_CHAR

    Hello
    Oracle Database 10g 10.2.0.5.0.

    I have the error in this code:
    nSuper_ NUMBER(6,2);
    ...
    dbms_output.put_line('Super: ' ||  TO_NUMBER(nSuper_,'FM9G990D90'));
    ...
    I have to use "TO_CHAR"... but my test is not failure, why? :
    --a)
    SET SERVEROUTPUT ON
    DECLARE
      nSuper_ NUMBER(6,2);
    BEGIN
      nSuper_ := 666.12;
      dbms_output.put_line('Super: ' ||  TO_NUMBER(nSuper_,'FM9G990D90'));
    
    END;
    /
    Super: 666,12
    
    
    --b)
    SET SERVEROUTPUT ON
    DECLARE
      nSuper_ NUMBER(6,2);
    BEGIN
      nSuper_ := 6666.12;
      dbms_output.put_line('Super: ' ||  TO_NUMBER(nSuper_,'FM9G990D90'));
    
    END;
    /
    DECLARE
    *
    ERROR en línea 1:
    ORA-06502: PL/SQL: error  numérico o de valor
    ORA-06512: en línea 5
    
    --c)
    SET SERVEROUTPUT ON
    DECLARE
      nSuper_ NUMBER(6,2);
    BEGIN
      nSuper_ := 6666.12;
      dbms_output.put_line('Super: ' ||  TO_CHAR(nSuper_,'FM9G990D90'));
    
    END;
    /
    Super: 6.666,12
    Why 'a' step missed and 'b' in case of failure?

    Hello

    jortri wrote:
    Why 'a' step missed and 'b' in case of failure?

    Because Oracle RDBMS is (too) soft on you for the conversion of 'simple' like that (but that does not mean that you will get errors...).

    To_number function takes as input a string.
    You send her a number, then Oracle does this: + "Ok this guy is sending a number in a TO_NUMBER function when it must be a string, we will do an implicit conversion for him in a transparent way" +. "
    In fact, your to_number (my_number_variable, 'FM9G990D90') becomes this:

    to_number( to_char(my_number_variable) ,'FM9G990D90')
    

    But, as you can see, the function to_char is not given any format, so that it uses your default session, which might be a different way to the mask you provide to to_number function.

    Please run this to understand what your failure to_number function receives as input:

    select 6666.12 number_implicitly_converted from dual;
    

    By default, on my computer it shows this:

    Scott@my11g SQL>select 6666.12 number_implicitly_converted from dual;
    
    NUMBER_IMPLICITLY_CONVERTED
    ---------------------------
                        6666.12
    

    Now, if I use it as input of your with your format mask to_number function:

    Scott@my11g SQL>select TO_NUMBER('6666.12','FM9G990D90') back_to_number from dual;
    select TO_NUMBER('6666.12','FM9G990D90') back_to_number from dual
                     *
    ERROR at line 1:
    ORA-01722: invalid number
    

    Tadammm!

    Conclusion: Not to spoil use to_number/to_char/to_date functions.
    :-)

  • Oracle to_number function pramaters

    I have problems with TO_NUMBER function second and third parameters. One dependent on the other? How does the nls_params parameter? I don't understand how the result of the query

    SELECT TO_NUMBER ('17,000, 23',
    "999G999D99,"
    ' nls_numeric_characters = ",". ')
    REFORMATTED_NUMBER
    FROM DUAL;

    can be 17000.23. Could someone please explain the above conversion process. I looked towards the top of the documentation, but it is not explanatory eneogh.

    P.S. The query above is taken from a book of preperation certificate Expert Oracle database SQL.

    See
    TO_NUMBER problem
    Re: number format

  • Invalid number when you use to_number function

    Hello
    Both in SQL * more and SQL Deveoper when I type and run

    Select to_number ('1234.64 ','9999.9 ') of double;

    I get ORA-01722: invalid number error. What can be the reason for this error?

    Mikhail says:
    SQL > select to_number('1234.64','9999D9') from double;
    Select double to_number('1234.64','9999D9')
    *
    ERROR on line 1:
    ORA-01722: invalid number

    You pass it a string ("1234.64'") with two digits to the right of the decimal separator, but you tell it that you have only one digit to the right of the decimal separator ('9999 D 9')

Maybe you are looking for

  • Hangs after startup (10-15 minutes), after update to Sierra

    After the upgrade to Mac OS sierra, every time when I start my MacBook Pro (retina, 15 inch, mid-2015). After the OS boot completed, my MacBook freezes around 10-15 minutes (can not do anything). But after that BONE back to normal, everything seems O

  • Satellite 1950 801, flashing display

    Hello!If I work for a long time with my laptop, the screen starts to Flash. When I move the swing display cover, the fault disappears. Does anyone have any idea what wrong with my camera? Card display, connection problems? Thank you

  • installation of Skype for ubuntu 16 04 LTS 32

    After downloading Skype-ubuntu-lucid 4.3.0.37 1 i386deb, launched installation. After several test, none of the results not achieved. He moved no and no notification on. Someone has experienced similar situation?

  • SKYPE CONTACTS

    HOW CAN I ADD A CONTACT? ROGER

  • Re: Satellite L875D-S7332: lack of bluetooth

    Hi people, I'm really surprised that a new laptop would have occurred without bluetooth capability, but well sure, I took delivery of my new machine and cannot use one of my devices with it. Before investing in a dongle, can someone make sure that it