Pie*_*ard 0 sql t-sql sql-server
我有以下代码。我想要时间格式为 '23:59:59' 而不是 '00:00:00' 的第二个(截止)日期。请问如何实现这一点?
declare @Date datetime
declare @StartDate datetime
declare @EndDate DateTime
set @date = GetDate()
Set @StartDate = DATEADD(M, DATEDIFF(M,0,@date),0)
set @EndDate = DATEADD(DD,DATEDIFF(DD,0, @date),0)
select @StartDate,@EndDate
Run Code Online (Sandbox Code Playgroud)
Joe*_*orn 12
DateTime 类型内部根本不使用文本。相反,它是一种二进制类型,您看到的任何其他指示都是该工具的便利。对于这种事情的最佳策略是尽可能长时间地将值保留为二进制类型,并且仅在最后一刻向用户显示的格式。
在结束日期的情况下,您在范围的最后一天获得一个值,并且您希望它包含全天,您最好的选择是调整第二天的开始,然后使用独占 范围末端的小于比较 (<),而不是包含在内的小于或等于(<=) 或 BETWEEN。这种方法称为半开放。
所以你会这样做:
WHERE myColumn >= @StartDate and myColumn < DATEADD(day, 1, @EndDate)
Run Code Online (Sandbox Code Playgroud)
而不是这个:
WHERE myColumn BETWEEN @StartDate AND @EndDate
Run Code Online (Sandbox Code Playgroud)
或者,在本例中,设置@EndDate如下:
declare @Date datetime
declare @StartDate datetime
declare @EndDate Datetime
set @date = current_timestamp
Set @StartDate = DATEADD(month, DATEDIFF(month,0,@date),0)
set @EndDate = DATEADD(day, 1, CAST(@date as date))
Run Code Online (Sandbox Code Playgroud)
然后,再次在范围末尾使用独占边界:
WHERE myColumn >= @StartDate and myColumn < @EndDate
Run Code Online (Sandbox Code Playgroud)
如果您确实需要获取一天中的最后一刻(同样:它通常效率较低且不太精确),您仍然可以从在目标日期的开始添加一天开始。然后,您可以从中减去您需要的任何数量(秒、毫秒、3.33 毫秒刻度等)。
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |