Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access数据库-教程

【Access小品】灵机一动-- 一个有趣的算法 [查看原文]


最新评论9人参与评论

2019/3/12 8:32:20冰青
看神仙打架很长见识啊

2015/2/10 17:32:54煮江品茶
呵呵,鬼打架的。
abs(字段)*2-1算球不出来的。

2015/2/10 16:37:26何保辛
到底 {1,0} 要换成 {-1,1} 还是 {1,-1} 随便大家自己写算法。{-1,1} * -1 = {1,-1}。我提出的只是 数据库可能会是 {1,0} 或 {-1,0},所以要 abs(字段)*2-1 或 1-abs(字段)*2。才能兼容现在小型的 access 数据库,和未来的任何数据库,不要现在埋下陷阱给自己。

2015/2/7 18:54:25煮江品茶
何保辛同志,在sql server、oracle、mysql中由于逻辑性的值用{1,0}表示,所以算法只是改写为:(1-类型*2)即可。转换的方法如下:
-2*{1,0}+1 => {-2+1,0+1} => {-1,1}

而用abs(类型)*2-1是得不到正确结果的。呵呵。


2015/2/7 15:45:16何保辛
或者用更复杂的算法来计算:

select *, 期初余额 + (贷方发生额合计-借方发生额合计) * (abs(类型)*2-1) as 期末余额 from 查询1


2015/2/7 15:35:54何保辛
温馨提示:这个在 Access 运行正常,但是在 mssql 或 mysql 都运行失败的。大家注意!

那是我2000年从Access MDB upsizing到mssql 遇到整个数据运行错误的问题!结果花了1个星期,把几万行代码找出来更新!还害怕改漏呢! mssql 的是否是 1和0,不是 -1和0;而 mysql 是根本没有逻辑类型的值的,所以我们都是用 bit 或兼容性更好的 tinyint(1) 来处理的,所以都是 1和0。

如果系统未来有可能从mdb升级到sql服务器的话,最好的习惯就是用 ado写稍微标准的 sql语句;或每个字段独立 sum(),用程序来作判断;或另类的方法是在设计的时候,加多了字段保存未来查询或报表需要的字段,因为现在硬盘便宜,我们可以用空间换取时间,每条记录保存的时候,预保存计算的半成品,让所有要跑的事务都快一点!


2015/2/7 15:22:27小小白菜
以前也看到过煮江品茶的贴子,很棒

2015/2/7 14:51:13许启鑫
好东西,True=-1,False=0

2015/2/7 14:47:17在人间
很巧妙的变换,学习了。

总记录:9篇  页次:1/1 9 1 :

发表评论您的评论将提升作者分享的动力!快来评论一下吧!

用户名:
密 码:
内 容:
 

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助