首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有整数表达式的Ints的子字符串

问没有整数表达式的Ints的子字符串
EN

Stack Overflow用户
提问于 2017-02-26 14:11:45
回答 1查看 25关注 0票数 0

我正在尝试更新数据库中的值,该数据库不通过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?

EN

回答 1

Stack Overflow用户

发布于 2017-02-26 14:55:38

我将假设这是某人试图避免浮点不精确的不幸尝试,这只是一个混乱的模式;数据库本身是一个支持浮点数的普通SQL数据库。

而不是试图处理这种混乱,它将吸收大量的时间,并产生许多完全可以避免的错误,修复它。创建一个使用适当decimal列的新模式(可能是新数据库),并将所有数据转换到该模式中。decimal和numeric通常是精确的,不会出现浮点错误(尽管对它们进行数学运算的结果可能会出错)。所有新代码都应该使用它,并且应该尽可能多地切换现有代码。

然后,将所有现有的乱七八糟的表转换为具有相同名称的视图。这些视图将十进制列转换回整数。这为您提供了对无法修复(或不知道)的查询的向后兼容性,同时维护了一组合理的表。

例如..。

代码语言:javascript
复制
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。

现在,所有旧的查询都将使用该视图。您甚至可以使用查询日志来查找仍在使用旧方法的零散代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42465352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档