

Archives of the TeradataForum
Message Posted: Thu, 06 Mar 2003 @ 14:19:42 GMT
Subj:   Re: SQL: integer part of a float_field 

From:   Geoffrey Rommel 
 How can I retrieve the integer part of a float_field?  
The short answer is: float_field  (float_field MOD 1)
Here's the long answer. The behavior of division operators (/ and MOD) depends on the data type of the field, as explained in the SQL
Reference, thus:
int_field / int_field TRUNCATES and returns an integer
dec_field / dec_field ROUNDS and returns a decimal
float_field / float_field rounds and returns a float
If there were such a thing as a "truncating division" operator, you could select float_field TDIV 1; this would divide by 1 and
discard the remainder, leaving you with the integer part (e.g., 9.876 TDIV 1 would be 9). Unfortunately, there is no such operator;
truncating division is available only with integers. Thus, you must select the expression shown above. Note, however, that the calculation
requires a floatingpoint division and a subtraction, so it's possible the answer will be slightly imprecise (e.g. 9.00000000002), and the
answer will be of type FLOAT. To change that, you must cast it to something else:
float_field  (float_field MOD 1) (integer) if you're sure it will never be greater than 2^31, or float_field  (float_field
MOD 1) (decimal(16,0))
 