设置日期时间变量的时间部分

时间:2011-02-10 00:39:12

标签: sql sql-server tsql datetime

我正在处理一个自动化作业的查询。它需要查找最后一天晚上8点到晚上8点之间的所有交易。我在考虑做这样的事情

DECLARE @start_date DATETIME
DECLARE @end_date DATETIME

SET @start_date = DATEADD(DAY, -2, GETDATE())
SET @end_date = DATEADD(DAY, -1, GETDATE())

对于自动查询,这非常适合计算日期部分。但变量的TIME部分是查询执行的当前时间。是否有一种快速简单的方法可以将两个变量的时间部分硬编码为晚上8点?

6 个答案:

答案 0 :(得分:30)

DECLARE @start_date DATETIME
DECLARE @end_date DATETIME

SET @start_date = DATEADD(hour, 20, DATEDIFF(DAY, 2, GETDATE()))
SET @end_date = @start_date + 1

select @start_date, @end_date

答案 1 :(得分:6)

这也有效:

DECLARE @start_date datetime
DECLARE @end_date datetime

SET @start_date = LEFT(CONVERT(nvarchar, DATEADD(DAY, -2, GETDATE()), 120), 11) + N'20:00:00'
SET @end_date = @start_date + 1

select @start_date, @end_date

虽然cyberkiwi的答案很聪明! =)

答案 2 :(得分:2)

我需要从数据库中提取日期并将3:00 Pm追加到它。我是这样做的

rows.TableRows

它返回的结果是Lord of the Rnis 2:40 。数据库中的日期为select dateadd(hour, 15, datediff(day, 0, myDatabaseDate)) from dbo.myDatabaseTable where myDatabaseId = 1 。我提出的解决方案是保持我当前的日期。我在现有日期添加了0天。我把它给了它15:00,它就像一个魅力。

答案 3 :(得分:0)

DECLARE @start_date DATETIME = DATEADD(HOUR, 20, DATEADD(MINUTE, 00, CONVERT(DATETIME, CONVERT(DATE, GETDATE())))) - 2
DECLARE @end_date DATETIME = DATEADD(HOUR, 20, DATEADD(MINUTE, 00, CONVERT(DATETIME, CONVERT(DATE, GETDATE())))) - 1

注意:

  • GETDATE() + X相当于DATEADD(DAY, X, GETDATE())
  • DATEIME转换为DATE,然后再转回DATETIME,将时间设置为午夜,即00:00:00.000
  • 单独的SETDECLARE语句是不必要的,但为了以后它们有所帮助,变量也可以设置为SELECT语句的一部分。

答案 4 :(得分:0)

如果仅更新日期时间的特定部分,则可以使用SMALLDATETIMEFROMPARTS,例如:

UPDATE MyTable 
SET MyDate = SMALLDATETIMEFROMPARTS(YEAR(MyDate), MONTH(MyDate), DAY(MyDate),YEAR(MyDate), <HoursValue>, <MinutesValue>) 

在其他情况下,可能需要将日期时间的一部分复制到其他日期或仅更新日期时间的某些部分:

UPDATE MyTable 
SET MyDate = SMALLDATETIMEFROMPARTS(YEAR(MyDate), MONTH(MyDate), DAY(MyDate),YEAR(MyDate), DATEPART(hour, MyDate), DATEPART(minute, MyDate)) 

有关更多此类功能,请参考SQL Server Date/Time related API references

答案 5 :(得分:-2)

我必须做类似的事情,创建一个程序,从前一天的某个时间运行到当天的某个时间。

这是我在前一天将开始日期设置为16:30所做的,基本上减去了你不想让它们回到0的部分,然后添加你想要的值。

-- Set Start Date to previous day and set start time to 16:30.00.000

SET @StartDate = GetDate()
SET @StartDate = DateAdd(dd,- 1, @StartDate) 
SET @StartDate = DateAdd(hh,- (DatePart(hh,@StartDate))+16, @StartDate) 
SET @StartDate = DateAdd(mi,- (DatePart(mi,@StartDate))+30, @StartDate) 
SET @StartDate = DateAdd(ss,- (DatePart(ss,@StartDate)), @StartDate) 
SET @StartDate = DateAdd(ms,- (DatePart(ms,@StartDate)), @StartDate) 

希望这有助于某人。