как использовать datepart с датой в SQL Server - PullRequest
0 голосов
/ 24 апреля 2018

Я работаю над SQL-запросом, где я хочу прикрепить datepart с временной частью.во времени часть минуты будет 20,40,59.и секунда всегда будет 00. Для этого я использовал следующий запрос: потому что у меня есть отчет только с 20-минутной продолжительностью, например, 0-20 минут, 21-40 минут и 41-59 минут любого часа.

DECLARE @RandomDate datetime
DECLARE @HH INT
DECLARE @MM INT
DECLARE @S INT=00


SELECT    @RandomDate=
DATEADD(day,ROUND(DATEDIFF(day,GETDATE(),GETDATE())*(CHECKSUM(NEWID())), 5),
DATEADD(second, CHECKSUM(NEWID()) % 48000, GETDATE())) 


SELECT @HH= DATEPART(hour,@RandomDate),@MM=DATEPART(MINUTE,@RandomDate)


SELECT  @RandomDate,@HH,@MM,@S


SELECT CONVERT(DATE,@RandomDate)+ 
DATEPART(hour,@RandomDate)+DATEPART(MINUTE,@RandomDate)+00

Но ошибка отображается как

Operand type clash: date is incompatible with int

в позиции

SELECT CONVERT(DATE,@RandomDate)+ 
DATEPART(hour,@RandomDate)+DATEPART(MINUTE,@RandomDate)+00

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018

Попробуйте это ...

SELECT TRY_PARSE(FORMAT(@RandomDate, N'yyyy-MM-dd-HH:mm') AS DATETIME)

Обновлено ...

SELECT CAST(CONVERT(VARCHAR(16), @RandomDate, 120) AS DATETIME)
0 голосов
/ 24 апреля 2018

Полагаю, вам нужно добавить часы и минуты в переменную даты в виде минут

SELECT dateadd(mi, @HH * 60 + @MM, convert(datetime, convert(date,@RandomDate)))
0 голосов
/ 24 апреля 2018

Если вы хотите удалить только часть секунд значения DateTime, вы можете сделать это намного проще, используя DATEADD и DATEPART:

SELECT DATEADD(Second, -DATEPART(Second, @RandomDate), @RandomDate)

Если вы хотите установить временную часть DateTime из отдельных частей, представляющих часы, минуты и секунды, вы можете сделать что-то вроде этого:

SELECT DATEADD(HOUR, @HH, 
           DATEADD(MINUTE, @MM, 
               DATEADD(SECOND, @S, CAST(CAST(@RandomDate As Date) As DateTime))
           )
       )

Двойное приведение к date и обратно к datetime усекает исходную часть времени до 00:00:00, и DATEADD добавляет отдельные значения к дате и времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...