2014-10-08 57 views
2

如何返回1,当年7月,当前日期为7月1日当年和返回7月1日,前一年在当前日期后之前是7月1日当前年份SQL,基于一年的时间返回一个标准的日期

我在查询的书面这一点,但我不断收到此错误:

"Implicit conversion from data type datetime to int is not allowed. Use the CONVERT function to run this query."

这里我的SQL查询:

CASE WHEN GETDATE() >= 
(DATETIME2FROMPARTS (year(GETDATE()), 07, 01, 0, 0, 0, 0, 0)) 
    THEN (DATETIME2FROMPARTS (DATEADD(year, 0, GETDATE()), 07, 01, 0, 0, 0, 0, 0)) 
    ELSE (DATETIME2FROMPARTS (DATEADD(year, -1, GETDATE()), 07, 01, 0, 0, 0, 0, 0)) 
    END AS EntryDate, 
+0

我不知道我理解。你说过你想在两种情况下都返回7月1日,那么为什么需要两种情况? – AdamMc331 2014-10-08 16:59:29

+1

对不起,我错误地用克拉格式化了我的问题 – 2014-10-08 17:02:06

+0

我现在明白了。我现在没有SQL运行(所以我不能测试这个,我不会回答你的问题),但也许你可以找到类似的东西[这里](http://blog.sqlauthority.com/2013/ 04/09/SQL服务器修复错误-217-隐式转换从 - 数据 - 类型,日期时间至INT-是-不被允许使用最转换函数到运行这 - 查询/)。 – AdamMc331 2014-10-08 17:05:56

回答

1

让我假设你的意思是7月1日这或许或之后做你想要的:

(case when month(getdate()) >= 7 
     then DATETIME2FROMPARTS(year(GETDATE() + 1, 07, 01, 0, 0, 0, 0, 0) 
     else DATETIME2FROMPARTS(year(GETDATE(), 07, 01, 0, 0, 0, 0, 0) 
end) 
+1

我认为这会奏效,但我认为它不会返回正确的价值。你说的是,如果我们在七月或以后,明年(今年+ 1)回来,如果不是,今年回来。我想你想'然后'说'GETDATE()'和'else'来说'GETDATE() - 1'? – AdamMc331 2014-10-08 17:03:35

+0

谢谢!我不得不像McAdam331建议的那样切换它,但是这很好地工作 – 2014-10-08 17:07:32

相关问题