【发布时间】:2019-06-14 20:13:44
【问题描述】:
我正在将 Access 程序迁移到 SQL Server。 以下是我直接取自access的SQL代码。
(([Promise Date])-([Date Recieved]))/100
如您所见,我正在尝试对日期时间值进行除法。
这是我收到的错误消息:
Msg 257, Level 16, State 3, Line 1
Implicit conversion from data type datetime to int is not allowed. Use the
CONVERT function to run this query.
这两个字段都是日期时间类型。有什么想法我想念的吗?
【问题讨论】:
-
错误信息很清楚:将日期值转换为Double/Float,然后进行算术运算。
-
您缺少的是,这是句法废话,您还有更多工作要做 - 并且在此之前可能还有额外的学习要做。您将需要弄清楚该计算的结果应该是什么,然后将其转换为 tsql。我可以猜测您应该使用 datediff 来获取日期之间的天数(?)然后除以,但我不知道它的真正作用。
-
将算术直接应用于日期实际上没有什么意义。日期不是数字,它们是(不出所料)日期。如果我要问你今天 (20190121) / 7 是什么日子,你能回答吗? (日期)20170804 * 2 呢?在不知道您在这里真正想要实现的目标的情况下,答案很困难。我怀疑其他人是对的,您想要天数/100 的差异,因此您需要使用
DATEDIFF,但是,我们还需要知道一些示例数据和预期结果。 -
如果你也有时间值,这非常重要,因为像
DATEDIFF(DAY,'2019-01-20T00:00:00', '2019-01-21T23:59:59')这样的东西是 1,尽管基本上相隔 2 天,而DATEDIFF(DAY,'2019-01-21T23:59:59','2019-01-22T00:00:01') 是 1,尽管只有两个日期和时间之间相隔 2 秒。 -
@level3looper - 它可能是一些更大计算的一部分,例如简单的每日利息支付 - 例如,如果它是每天 1% 的利息
标签: sql-server tsql ms-access database-migration