Oracle: Decimal and rounding - sql

I have a value in the table 0.0821, and I want to convert it to 8.21.
My SQL query is to_char(round(prdll_yr2.rate_chg_pct_qty *100 ),'9.99')
But it returns 8.00 instead of 8.21.

to_char(round(0.0821 *100,2 ),'9.99')
to_char(round(prdll_yr2.rate_chg_pct_qty *100,2 ),'9.99')
you're missing the number of decimals to display on the round... it will default to 0 if omitted
or for an example:
select to_char(round(0.0821 *100,2 ),'9.99') from dual;
Results in: 8.21
select to_char(round(0.0821 *100),'9.99') from dual;
Results in: 8.00
----------------------------GIVEN NEW INFORMATION:---------------------------
to_char(round(0.0821 *100,2 ),'9,999.99')
Adjust the 9,999.99 format to be equal to the scale and precision of the allowed in the database. so if your value is Numeric(9,5) this implies 4 leading numbers followed by 5 decimal places. Since you're multiplying by 100 the largest value you could have is 6 positions before the decimal so format of 999,999.99 and the 3rd decimal would be "Rounded"

Related

SQL , format all numbers to 2 decimal places (eg 20 to 20.00)

I have a data set with inconsistencies in a column with double values. Some are displayed as eg. 24.55, and others as 24.5 or 24. I want all values to be displayed to 2 decimals, so 24 should be 24.00, and 23.1 should be 23.10 etc. What code would work in this instance?
In general, such conversions are both database-specific and GUI-specific. However, the database can convert the value to something with two decimal places by using numeric/decimal (those are equivalent):
select cast(value as numeric(10, 2))
The "2" is the two digits after the decimal place. This should be displayed with two digits -- in any reasonable interface.
If you are using MySQL (as PHP suggests), you can use the format() function to accomplish this:
select format(value, 2)

I want my data upto 6 decimal places in impala

I have a double type column in impala
while I am trying to cut it upto some decimal places
I got this error
ERROR: AnalysisException: No matching function with signature: truncate(DOUBLE, TINYINT).
e.g select truncate(cast(0.4893617021276596 as double),7);
any workaround will be welcome
You can use round():
select round(col, 6)
If you actually want a truncate, then subtract 0.0000005:
select round(col - 0.0000005, 6)
Using the DECIMAL type, it is possible to represent numbers with greater precision than the FLOAT or DOUBLE types can represent.
The maximum allowed precision and scale of the DECIMAL type are both 38.
Precision is the total number of digits, regardless of the location of the decimal point.
Scale is the number of digits after the decimal place.
To represent the number 8.54 without a loss of precision, you would need a
DECIMAL type with precision of at least 3, and scale of at least 2.
Example:
Note that the DECIMAL(17,16) type means there is a total of 17 digits, with 16 of them after the decimal point.
DECIMAL(17,16) 3.1415926535897932
You could ALTER your table with DECIMAL type as follow:
ALTER TABLE my_table CHANGE field field DECIMAL(precision, scale);
or as suggest #Gordon Linoff, you could use round() function.

Rounding of Decimal values

Is there any function in sql which rounds of the value to nearest whole number.
For example,
If value is 12.56 then it should be 13.
If value is 12.34 then it should be 12.
I tried with Ceiling and floor but it doesn't give me accurate result. Ceiling gives me both the value as 13 where as i need 13 and 12 depending on my value.
Is there any function that i can use to get the desired result I want?
Any help is appreciated!
I figured it out.
I just used ROUND(value,0) which gave me desired result.
If you don't care about your decimal values being saved, like the people said ROUND() will work, just pass the second parameter as 0 to say that you don't care about the decimal places, Precision = 0 = NO Decimal, so for example:
DECLARE #floater FLOAT = 2.50
SELECT ROUND(#floater, 0) --Returns 3
SET #floater = 2.10
SELECT ROUND(#floater, 0) --Returns 2

Currency column with no decimals: add in decimal

I've been reviewing a currency column that has no decimal spaces. It's an output from a legacy system loaded into our Oracle database.
If the field has three or more numerals it should have a decimal at three spaces right.
If the value has less than three numerals, it should have a decimal and a leading zero.
For example:
2050 should be converted to 2.050
110 should be converted to .110
50 should be converted to .050
I've tried using cast, but I received the error 'invalid datatype.'
It's a basic select statement:
select
customer_id
cast(ENDING_BALANCE as (decimal(10,3)) as Bal_1
from Current_Balances
Any suggestions would be appreciated.
I think you need to cast it to a number and divide by 1000
SELECT CAST(CAST('2050' as INT)/1000 as DECIMAL(10,3)) FROM DUAL
If you really mean to have the output format looking like that, you need to TO_CHAR it
SELECT LTRIM(TO_CHAR(CAST('2050' as INT)/1000, 'FM0.000'), '0') FROM DUAL

SQL keep two decimal places for integers after converting cent into dollar

I am trying convert number values stored in the database as cents into dollar and keep 2 decimal places.
The following code will work only if v_cent/100.00 is NOT integer
SELECT CAST(ROUND(v_cent/100.00, 2) AS NUMERIC(8,2)) FROM DUAL;
If v_cent = 20000 then the result is 200.
How could I reserve 2 decimal places even if the result is integer?
Use to_char(), say to convert this to an output format with two decimal places:
select to_char(v_cent / 100.0, 'FM999999.99')
from dual;
As for your formulation it is doing the right thing. The only issue is that the decimal points are not printed out by default.