获取日期 SQL 服务器的最大可能时间
Get the max possible time of a date SQL Server
我想做的是在 SQL 服务器中获取一个日期,并找到该日期的最后可能的小时、分钟、秒和毫秒。
所以如果日期是这样的:2021-02-16 13:08:58.620
我想return:2021-02-16 23:59:59.999
我试过类似的方法,但它不起作用,我想我遗漏了一些东西,它正在转换时间并保持该日期的小时、分钟、秒和毫秒
Select
DateAdd(MILLISECOND, -1, (Convert(datetime, DATEADD(day, 1, DateValue), 101))) as lastPossibleDate
From
Table1
将其转换为日期以截断时间,添加一天,将其转回日期时间,减去毫秒...
declare @Test datetime2(3) = '2021-02-16 13:08:58.620';
select dateadd(millisecond, -1, convert(datetime2(3),dateadd(day, 1, convert(date, @Test))));
Result
2021-02-16 23:59:59.999
请注意,如果您直接使用 datetime
而不是 datetime(2)
,您的准确度只会下降到 3 毫秒。 datetime(2)
是推荐使用的日期时间数据类型。
另一种简单的方法是将您的 datetime
转换为一个日期,然后将它与给定精度的最大可能时间连接起来。如果你想要精确到小数点后 3 位,你需要使用 datetime2(3)
declare @date datetime='20210216 13:08:58.620';
select Convert(datetime2(3),Concat(convert(date,@date),' 23:59:59.999'));
format()
的另一种选择
declare @Test datetime2(3) = '2021-02-16 13:08:58.620';
select convert(datetime2(3),format(@Test,'yyyy-MM-dd 23:59:59.999'))
对于日期时间数据类型,时间的可能最大值为:23:59:59.997
我们可以使用 DateTimeFromParts 推导当天的最大可能日期时间值。
DECLARE @datevalue datetime = '2021-02-16 13:08:58.620'
SELECT DATETIMEFROMPARTS ( year(@datevalue), month(@datevalue), day(@datevalue), 23, 59, 59, 997 ) as maxPossibleValueForDay
maxPossibleValueForDay
2021-02-16 23:59:59.997
我想做的是在 SQL 服务器中获取一个日期,并找到该日期的最后可能的小时、分钟、秒和毫秒。
所以如果日期是这样的:2021-02-16 13:08:58.620
我想return:2021-02-16 23:59:59.999
我试过类似的方法,但它不起作用,我想我遗漏了一些东西,它正在转换时间并保持该日期的小时、分钟、秒和毫秒
Select
DateAdd(MILLISECOND, -1, (Convert(datetime, DATEADD(day, 1, DateValue), 101))) as lastPossibleDate
From
Table1
将其转换为日期以截断时间,添加一天,将其转回日期时间,减去毫秒...
declare @Test datetime2(3) = '2021-02-16 13:08:58.620';
select dateadd(millisecond, -1, convert(datetime2(3),dateadd(day, 1, convert(date, @Test))));
Result |
---|
2021-02-16 23:59:59.999 |
请注意,如果您直接使用 datetime
而不是 datetime(2)
,您的准确度只会下降到 3 毫秒。 datetime(2)
是推荐使用的日期时间数据类型。
另一种简单的方法是将您的 datetime
转换为一个日期,然后将它与给定精度的最大可能时间连接起来。如果你想要精确到小数点后 3 位,你需要使用 datetime2(3)
declare @date datetime='20210216 13:08:58.620';
select Convert(datetime2(3),Concat(convert(date,@date),' 23:59:59.999'));
format()
declare @Test datetime2(3) = '2021-02-16 13:08:58.620';
select convert(datetime2(3),format(@Test,'yyyy-MM-dd 23:59:59.999'))
对于日期时间数据类型,时间的可能最大值为:23:59:59.997
我们可以使用 DateTimeFromParts 推导当天的最大可能日期时间值。
DECLARE @datevalue datetime = '2021-02-16 13:08:58.620'
SELECT DATETIMEFROMPARTS ( year(@datevalue), month(@datevalue), day(@datevalue), 23, 59, 59, 997 ) as maxPossibleValueForDay
maxPossibleValueForDay |
---|
2021-02-16 23:59:59.997 |