This is a discussion on strange SQL behaviour within the DB2 forums, part of the Database Server Software category; --> Hello, I am running DB2 v7.2 on NT. suppose I ussue following simple SQL stmt: select 3/18*18, dec(3,8,3)/dec(18,8,3)*dec(18,8,3), dec(3,31,8)/dec(18,31,8)*dec(18,31,8), ...
| |||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| ||||
| Hello, I am running DB2 v7.2 on NT. suppose I ussue following simple SQL stmt: select 3/18*18, dec(3,8,3)/dec(18,8,3)*dec(18,8,3), dec(3,31,8)/dec(18,31,8)*dec(18,31,8), dec(3,30,8)/dec(18,30,8)*dec(18,30,8) from sysibm.sysdummy1 The results are 3 1.8 Why doesn't the dec(..,31,8) give the correct result ? Can anyone explain this ? 30,8 works. 29,8 works, ........ Thanks in advance Peter -- Posted via http://dbforums.com |
| ||||
| That worked exactly as designed. Please see "SQL Reference, Chapter 2. Language elements, Expressions with arithmetic operatiors" SELECT * FROM (VALUES ('1. Operands', 'Integer', 'DEC(8,3)', 'DEC(31,8)', 'DEC(30,8)') , ('31. Result' , CHAR(3/18*18) , CHAR(dec(3, 8,3)/dec(18, 8,3)*dec(18, 8,3)) , CHAR(dec(3,31,8)/dec(18,31,8)*dec(18,31,8)) , CHAR(dec(3,30,8)/dec(18,30,8)*dec(18,30,8)) ) , ('21. Mid Result' , CHAR(3/18) , CHAR(dec(3, 8,3)/dec(18, 8,3)) , CHAR(dec(3,31,8)/dec(18,31,8)) , CHAR(dec(3,30,8)/dec(18,30,8)) ) , ('20. DEC(p,s)/DEC(p'',s'') -> DEC(31 , 31-p-s+s'')' , 'Large integer' , '(8,3)/(8,3)->DEC(31,23)' , '(31,8)/(31,8)->DEC(31,0)' , '(30,8)/(30,8)->DEC(31,1)' ) , ('30. DEC(p,s)*DEC(p'',s'') -> DEC(min(31,p+p'') , min(31,s+s''))' , 'Large integer' , '(31,23)*(8,3)->DEC(31,26)' , '(31,0)*(31,8)->DEC(31,8)' , '(31,1)*(30,8)->DEC(31,9)' ) ) AS t ORDER BY 1 ; --------------------------------------------------- 1 2 3 4 5 ----------------------------------------------------------- ------------- --------------------------------- --------------------------------- --------------------------------- 1. Operands Integer DEC(8,3) DEC(31,8) DEC(30,8) 20. DEC(p,s)/DEC(p',s') -> DEC(31 , 31-p-s+s') Large integer (8,3)/(8,3)->DEC(31,23) (31,8)/(31,8)->DEC(31,0) (30,8)/(30,8)->DEC(31,1) 21. Mid Result 0 00000000.16666666666666666666666 0000000000000000000000000000000. 000000000000000000000000000000.1 30. DEC(p,s)*DEC(p',s') -> DEC(min(31,p+p') , min(31,s+s')) Large integer (31,23)*(8,3)->DEC(31,26) (31,0)*(31,8)->DEC(31,8) (31,1)*(30,8)->DEC(31,9) 31. Result 0 00002.99999999999999999999988000 00000000000000000000000.00000000 0000000000000000000001.800000000 5 record(s) selected. |