【问题标题】:SQL Server : get hour from datetime and then change itSQL Server:从日期时间获取小时然后更改它
【发布时间】:2012-08-30 22:16:23
【问题描述】:

我已经尝试了一段时间,到目前为止,除了我需要使用名为 DATEPART 的东西(我不知道如何使用它)之外,我的研究并没有让我走得太远。我的 SQL Server 不是最好的。

我有declare @DueDate datetime 并且通过游标@DueDate 将始终是当前行的DueDate (datetime) 列。到目前为止,这完美无缺。

现在我要做的是从@DueDate 中取出小时,检查它是否为 0,如果小时为 0,将 @DueDate 小时设置为午夜,然后更新行 DueDate 列使用这个@DueDate 变量。

如上所述,我的光标和变量都在工作,我只是不知道如何从@DueDate 获取小时,检查小时值是多少,然后更新@DueDate 变量,使其小时现在是午夜.我知道如何更新表格,这很容易。

提前致谢!

【问题讨论】:

    标签: sql sql-server datetime sql-server-2008-r2 hour


    【解决方案1】:

    我认为这完全符合您的要求,无需使用光标。

    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 开发需要不同的思维方式。不要考虑迭代,考虑原子。您可以在一个语句中完成大多数事情(如果足够复杂,一个语句可能会很长)。

    【讨论】:

    • 这增加了 1 天并没有工作,但我修改了代码来工作,设置到期日期 = dateadd(hh, 1, duedate)。
    • @LandinMartens。因此,您将使用午夜的所有日期,并将它们设置为凌晨 1 点。这不是你要求的,但很高兴我能提供帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多