Я пытаюсь взять дату в SQL Server и найти последний возможный час, минуту, секунду и миллисекунду этой даты.

Итак, если дата такая: 2021-02-16 13:08:58.620

Я хочу вернуться: 2021-02-16 23:59:59.999

Я пробовал что-то подобное, но это не работает, и я предполагаю, что мне не хватает чего-то, где он преобразует время и сохраняет час, минуту, секунду и миллисекунду этой даты

Select 
    DateAdd(MILLISECOND, -1, (Convert(datetime, DATEADD(day, 1, DateValue), 101))) as lastPossibleDate
From 
    Table1
2
Eric 7 Июн 2021 в 23:31

2 ответа

Другой простой способ - привести ваш datetime к дате и просто связать его с максимально возможным временем для вашей заданной точности. Если вам нужна точность до трех знаков после запятой, вам нужно использовать datetime2(3)

declare @date datetime='20210216 13:08:58.620';

select Convert(datetime2(3),Concat(convert(date,@date),' 23:59:59.999'));
2
Stu 7 Июн 2021 в 20:41

Еще один вариант через 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'))
2
John Cappelletti 7 Июн 2021 в 21:15