2017-10-06 64 views
-4

開始我有一個小requirement.How得到以下輸出反向位置的數字:乘以其從2

輸入的字符串123456

我需要找到相反的位置,從2日開始,即234567。 現在將每個值乘以反向位置值並相加。 例如:1*7+2*6+3*5+4*4+5*3+6*2在plsql中。

+0

這是另一個問題功課 – user1948847

+0

你嘗試過這麼遠嗎? –

+0

DECLARE no NUMBER(20):='123456'; len NUMBER; c VARCHAR2(40); add varchar2(40);總共VARCHAR2(40):= 0; BEGIN FOR IN 1..length(no) LOOP dbms_output.put_line('Looping'|| i); c:= substr(no,i,1); dbms_output.put_line('C的值是'|| c); len:= length(no)+2; len:= len-i; dbms_output.put_line('Length is'|| len); add:= c * len; total:= total + add; dbms_output.put_line('乘法後'|| add); dbms_output.put_line('Total is'|| total); END LOOP; END; – nkt

回答

0

SQL Fiddle

查詢1

WITH data (value, total) AS (
    SELECT 123456, 0 FROM DUAL 
UNION ALL 
    SELECT TO_NUMBER(SUBSTR(value, 2)), 
     total + SUBSTR(value, 1, 1) * (1 + LENGTH(value)) 
    FROM data 
    WHERE value IS NOT NULL 
) 
SELECT total FROM data WHERE value IS NULL 

Results

| TOTAL | 
|-------| 
| 77 | 
+0

謝謝,但我已經嘗試了以下方法,有什麼辦法可以使它更有效嗎? DECLARE no NUMBER(20):='123456'; len NUMBER; c VARCHAR2(40); add varchar2(40);總共VARCHAR2(40):= 0; BEGIN FOR IN 1..length(no) LOOP dbms_output.put_line('Looping'|| i); c:= substr(no,i,1); dbms_output.put_line('C的值是'|| c); len:= length(no)+2; len:= len-i; dbms_output.put_line('Length is'|| len); add:= c * len; total:= total + add; dbms_output.put_line('乘法後'|| add); dbms_output.put_line('Total is'|| total); END LOOP; END; – nkt

+0

@nkt。 'SQL'是上面已經回答的最有效的方法。使用'PLSQL'你已經解決了它。讓我們知道您是否需要任何特別幫助。 – XING