我已经尝试了一段时间,到目前为止,除了我需要使用名为DATEPART
的东西(我不知道如何使用它)之外,研究还没有让我走得太远。我的SQL Server不是最好的。
我有declare @DueDate datetime
,并且通过游标@DueDate
将始终是当前行的DueDate
(datetime
)列。到目前为止,这完全没有问题。
现在我要做的是从@DueDate
获取小时,检查它是否为0,如果小时为0,则将@DueDate
小时设置为午夜然后更新具有此@DueDate
变量的行DueDate列。
如上所述,我有光标和变量全部工作,我只是不知道如何从@DueDate
获取小时,检查小时值是多少,并更新@DueDate变量,使其小时为现在是午夜。我知道如何更新表格,这是最简单的部分。
提前致谢!
答案 0 :(得分:3)
我认为这完全符合您的要求而不使用光标。
UPDATE [MyTable]
SET DueDate = DATEADD(dd, 1, DueDate) -- add one day (set to midnight)
WHERE DATEPART(hh, DueDate) = 0 -- do this for dates where hour is zero (midnight)
请注意,应尽可能避免使用游标。 SQL开发需要一种不同的思维方式。不要考虑迭代,思考原子。你可以在一个语句中做大多数事情(如果足够复杂,一个语句可能会很长)。