如何在sql server中使用datepart和date

时间:2018-04-24 11:06:25

标签: sql-server sql-server-2008

我正在进行sql查询,我想在其中添加datepart和time部分。在时间部分分钟将是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 :(得分:1)

如果您只想删除DateTime值的秒部分,则可以使用DATEADDDATEPART更简单地执行此操作:

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会将各个值添加到日期时间。

答案 1 :(得分:1)

我猜您需要将日期变量的小时和分钟添加为分钟

SELECT dateadd(mi, @HH * 60 + @MM, convert(datetime, convert(date,@RandomDate)))

答案 2 :(得分:0)

试试这个......

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

...更新

SELECT CAST(CONVERT(VARCHAR(16), @RandomDate, 120) AS DATETIME)