在不知道预期输出是什么,或者您尝试计算什么的情况下,我发现导致错误的原因是您尝试使用以下方法将 int 值与字符串值连接起来:+
sign.
在这些情况下,SQL Server 尝试将字符串值隐式转换为 int 值以执行添加操作(而不是您想要的串联操作)。
因此,我添加了对 varchar 和空格的转换,以便对 datetime 的转换能够工作。
Select cast((Datediff(day,'21 JULY 2017', CAST(cast(day(dateadd(mm,DateDiff(mm, -1, '21 JULY 2017'),0) -1) as varchar(10)) +' '+
LEFT(CONVERT(VARCHAR(10), DATENAME(MM,'21 JULY 2017') , 120), 10) +' '+
cast(year('21 JULY 2017') as varchar(4)) as datetime))) as int) *
(2.08/DAY(EOMONTH('21 JULY 2017')))
我得到的输出是0.6709677419350
,但由于我不知道你的目标是什么,所以我不知道它是否正确。
由于我有一些空闲时间,我能够重写您的查询并通过更简单的查询获得完全相同的结果:
Select Datediff(day,'21 JULY 2017', EOMONTH('21 JULY 2017')) *
(2.08/DAY(EOMONTH('21 JULY 2017')))