我正在尝试更新数据库中的值,该数据库不通过DB本身执行浮点数/小数。小数的前端“翻译”也是不一致的。
所以A列可以取1234并将其转化为12.34,B列可以取它并将其转化为1.234。
当将两列相乘时,我会得到一个需要删减的长整型。但是,整数表达式没有一致性。
员工A:薪酬:20.67美元。以分贝为单位: 20670小时工作: 3.95.以分贝: 395
20670 * 395 = 8164650。需要为8164。LEFT(rate *hrs, 5) = 8164
员工B:薪酬:18.07美元。单位db: 18079小时工作时间: 8。单位db: 800
18079 * 800 = 14463200。需要为14464。LEFT(rate*hrs,5) = 1446
有没有其他方法可以在不依赖整数表达式的情况下减少int?
发布于 2017-02-26 14:55:38
我将假设这是某人试图避免浮点不精确的不幸尝试,这只是一个混乱的模式;数据库本身是一个支持浮点数的普通SQL数据库。
而不是试图处理这种混乱,它将吸收大量的时间,并产生许多完全可以避免的错误,修复它。创建一个使用适当decimal列的新模式(可能是新数据库),并将所有数据转换到该模式中。decimal和numeric通常是精确的,不会出现浮点错误(尽管对它们进行数学运算的结果可能会出错)。所有新代码都应该使用它,并且应该尽可能多地切换现有代码。
然后,将所有现有的乱七八糟的表转换为具有相同名称的视图。这些视图将十进制列转换回整数。这为您提供了对无法修复(或不知道)的查询的向后兼容性,同时维护了一组合理的表。
例如..。
create table employee_pay2 (
EmployeeID integer references(employee),
Rate decimal(10,2),
Hours decimal(10,2)
);
create view employee_pay_view
as
select
EmployeeID,
Rate * 1000,
Hours * 100
from employee_pay;确定视图有效后,删除旧的表并重命名视图为旧的表名称(SQL Server recommends you drop and recreate the view rather than renaming it。
现在,所有旧的查询都将使用该视图。您甚至可以使用查询日志来查找仍在使用旧方法的零散代码。
https://stackoverflow.com/questions/42465352
复制相似问题