SELECT
CAST((DATEDIFF(day, '21 JULY 2017', CAST(DAY(DATEADD(mm, DATEDIFF(mm, -1, '21 JULY 2017'), 0) -1) +
LEFT(CONVERT(VARCHAR, 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')))
我想计算一天的计算结果。
但是我收到了一个错误:
将varchar值'July'转换为数据类型int时,转换失败。
答案 0 :(得分:1)
在不知道预期输出是什么,或者你试图计算什么的情况下,我发现你得到的错误的原因是你尝试使用{{1}将int值与字符串值连接起来。 }签 在这些情况下,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