Solved

Firebird DB - need to update column values

Posted on 2007-11-27
13
2,265 Views
Last Modified: 2013-12-09
Hello experts!

Due to a messy import of data from another database we need an SQL statement with Firebird syntax that will update the numeric values in entire columns of specific tables by rounding to two decimal places. I am using Database Workbench to access the database, but don't know the proper SQL command / script to run to adjust the values as stated above.  I also know that there are a probably a dozen post here that could help me, but I don't have time to keep looking for them.

I have table called JOBS, with columns called COST, AVGCOST, ESTCOST to name a few.  

TIA!
0
Comment
Question by:boris711
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 5
  • 2
13 Comments
 
LVL 19

Expert Comment

by:NickUpson
ID: 20363626
update jobs set cost = cast(cost as decimal(15,2)), ....... where

please check before doing on the live data that you get the rounding you want
0
 
LVL 7

Expert Comment

by:DanSo1
ID: 20372835
Sorry NickUpsons but your command will not round but just cut numbers...
For example:   1.566 will become 1.56
I think that boris711 need to round numbers so he shoud get 1.57
But I think the solution will need special UDF.

Regards
  Daniel

0
 
LVL 19

Expert Comment

by:NickUpson
ID: 20374012
if so you can fix by using
update jobs set cost = cast((cost + 0.005) as decimal(15,2)), ....... where
0
Guide to Performance: Optimization & Monitoring

Nowadays, monitoring is a mixture of tools, systems, and codes—making it a very complex process. And with this complexity, comes variables for failure. Get DZone’s new Guide to Performance to learn how to proactively find these variables and solve them before a disruption occurs.

 
LVL 1

Author Comment

by:boris711
ID: 20397814
Thank you for your response, I will test this command.
0
 
LVL 7

Expert Comment

by:DanSo1
ID: 20401732
One more thing.
When "cost" will be negative you need to subtract those 0.0005
Like that:
   cast((cost - 0.005) as decimal(15,2))  .... where cost <0
0
 
LVL 1

Author Comment

by:boris711
ID: 20404533
It would appear to me that the above recommendations would change the datatype, maybe I'm wrong. It just seems like this should be easier.

Just to clarify, I am new to SQL and am having problems finding adequate (newbie) reference for the Firebird (we are using v1.5, not by our choice) flavor in particular. I own "The Firebird Book" but have found it most useful as a doorstop, probably due to my current level of knowledge.

I believe this SQL statement would do what I require in other SQL flavors:
Update ITEM Set avgcost = Round(avgcost, 4)

But in Firebird it would appear that there is no Round function. Can anyone tell me what the equivalent FB command would be?
0
 
LVL 19

Expert Comment

by:NickUpson
ID: 20405450
so what exactly does this function do, round up, down, apply bankers rounding rules or .....
0
 
LVL 1

Author Comment

by:boris711
ID: 20405551
I believe this function will round to four decimal places all the values in column (avgcost) in table (ITEM). I admit, I could be wrong, but that's why I am asking the question in the first place.
0
 
LVL 19

Expert Comment

by:NickUpson
ID: 20405711
you need to decide exactly what rounding you want, e.g. 3.12345 - do you want that as 3.1234 or 3.1235
0
 
LVL 1

Author Comment

by:boris711
ID: 20405796
the typical rounding...3.12345 to 3.1235
0
 
LVL 19

Accepted Solution

by:
NickUpson earned 500 total points
ID: 20406644
then this should do it

update jobs set cost = cast((cost + 0.00005) as decimal(15,4)), ....... where cost > 0.00
0
 
LVL 1

Author Comment

by:boris711
ID: 20429218
Thx, Nick, will give it a try on my test db.
0
 
LVL 1

Author Comment

by:boris711
ID: 20445041
For anyone else that might need it, this is the Firebird SQL command as run from within the Database Workbench SQL Editor. It worked exactly as required, performing standard rounding. If = or > 5 then round up, else round down.  

update <table_name> set <column_name> = cast (<column_name> as decimal(15,< #_dec_places>)) where <column_name> > 0.00;

It did not change the datatype of the column, as it appears it might. Also, if you remove "where <column_name> > 0.00" it works correctly on negative numbers.

Thanks for your time, Nick.
0

Featured Post

Forrester Webinar: xMatters Delivers 261% ROI

Guest speaker Dean Davison, Forrester Principal Consultant, explains how a Fortune 500 communication company using xMatters found these results: Achieved a 261% ROI, Experienced $753,280 in net present value benefits over 3 years and Reduced MTTR by 91% for tier 1 incidents.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Recently, Microsoft released a best-practice guide for securing Active Directory. It's a whopping 300+ pages long. Those of us tasked with securing our company’s databases and systems would, ideally, have time to devote to learning the ins and outs…
Microsoft Access is a place to store data within tables and represent this stored data using multiple database objects such as in form of macros, forms, reports, etc. After a MS Access database is created there is need to improve the performance and…
Video by: Steve
Using examples as well as descriptions, step through each of the common simple join types, explaining differences in syntax, differences in expected outputs and showing how the queries run along with the actual outputs based upon a simple set of dem…
This is a high-level webinar that covers the history of enterprise open source database use. It addresses both the advantages companies see in using open source database technologies, as well as the fears and reservations they might have. In this…

734 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question