2017-05-11 19 views
2

我有一個表1列NUMBER_OF_DIGITS和另一個表2列READING_VALUE的Oracle SQL:轉換的位數來最大數量

我想從表2,正在接近最大值

實施例:NUMBER_OF_DIGITS - 4,最大值爲9999,我需要從表2

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
<style> 
 
table, th, td { 
 
    border: 1px solid black; 
 
} 
 
</style> 
 
</head> 
 
<body> 
 
<p>Table 1</p> 
 
<table> 
 
    <tr> 
 
    <th>PK</th> 
 
    <th>NUMBER_OF_DIGITS</th> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>4</td> 
 
    </tr> 
 
    <tr> 
 
    <td>2</td> 
 
    <td>4</td> 
 
    </tr> 
 
    <tr> 
 
    <td>3</td> 
 
    <td>3</td> 
 
    </tr> 
 
    <tr> 
 
    <td>4</td> 
 
    <td>3</td> 
 
    </tr> 
 
    <tr> 
 
    <td>5</td> 
 
    <td>5</td> 
 
    </tr> 
 
    <tr> 
 
    <td>6</td> 
 
    <td>5</td> 
 
    </tr> 
 
</table> 
 
<p>Table 2</p> 
 
<table> 
 
    <tr> 
 
    <th>PK</th> 
 
    <th>VALUE</th> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>1000</td> 
 
    </tr> 
 
    <tr> 
 
    <td>2</td> 
 
    <td>9990</td> 
 
    </tr> 
 
    <tr> 
 
    <td>3</td> 
 
    <td>900</td> 
 
    </tr> 
 
    <tr> 
 
    <td>4</td> 
 
    <td>45</td> 
 
    </tr> 
 
    <tr> 
 
    <td>5</td> 
 
    <td>99789</td> 
 
    </tr> 
 
    <tr> 
 
    <td>6</td> 
 
    <td>23456</td> 
 
    </tr> 
 
</table> 
 

 
</body> 
 
</html>

得到最接近於9999的值

+0

可以顯示一些示例數據和預期的結果? –

+0

你的意思是「最接近」還是你的意思是「最接近,但不超過位數」?例如:number_of_digits = 4,最大值爲9999,表2中的值爲1000和10001.值10001最接近9999 - 但是它是五位數。這是期望的結果,還是1000期望的結果? (另外,如果數值是10和10001,你會選擇10,還是隻需要四位數字?) – mathguy

回答

1

試試這個,連接你要搞清楚自己:

select to_number(substr('99999999999999999', 1, max_digits), '99999999999999999') - Table2.READING_VALUE as Val_Diff 
from Table1 
inner join Table2 
on Somecommoncol = someothercommoncol 
+1

你是救星! Oracle不支持LEFT,但我可以用SUBSTR重寫。 – raksrockz