【发布时间】:2015-08-13 14:31:00
【问题描述】:
我有一个问题,我无法解决。
我在 MS Access 的宏中进行了时间计算。例如
format(datediff("n",Format(#2015-08-12 17:30:00#, "dd.mm.yyyy hh:nn"),Format(#2015-08-12 23:00:00#, "dd.mm.yyyy hh:nn"))/1440,"hh:nn")
给出5:30,它存储在 SQL SErver 2008R2 的日期时间列中
1899-12-30 05:30:00.000.
现在我将计算转移到存储过程中并使用
convert(time,'2015-08-12 23:00:00'-'2015-08-12 17:30:00')
我得到1900-01-01 05:30:00.000 的日期时间值。
我知道这是 VBA 和 SQL Server 之间的区别,但我该如何解决它,甚至更好地处理已经存在的值?
【问题讨论】:
-
您要计算什么?一次?还是日期和时间?您的两个示例中的时间 (5:30) 都是正确的。
-
我只需要几小时和几分钟的工作时间。这个时间乘以小时工资就是工资。
-
答案在两种情况下都是正确的,除非您出于好奇想知道为什么不同的日期,否则我看不到任何问题。
-
我只需要几小时和几分钟的工作时间。这个时间乘以小时工资就得到了薪水。问题是,当第一次将日期从 Access-Database 传输到 SQL-Server 时,我将列定义为 datetime 并且仍然填充了 VBA 中的值。现在我尝试将数据类型更改为 time(7),当计算 convert(float, workingtime)*wages*1440/60 作为薪水时,我得到一个错误“不允许从数据类型 time 到 float 的显式转换。”那么我该如何处理这个问题呢?
标签: sql sql-server datetime