我正在努力获得smalldatetime
值"今天晚上9点和#34;在查询中。我以为我可以用
DATEADD(HOUR, 21, CONVERT(date, GETDATE()))
但SQL Server不喜欢这样 - 我收到了错误
数据的日期函数dateadd不支持datepart小时 输入日期。
建议解决方法?
答案 0 :(得分:5)
非常简单,只需在投放到date
后将datetime
投回date
。
因此,您将获得current_date 00:00:00
,然后再添加21小时:
select dateadd(hh, 21, cast(cast(getdate() as date) as datetime))
答案 1 :(得分:2)
这是因为dateadd的第3个参数应该是日期时间类型,而不是日期。
SELECT DATEADD(HOUR, 21, CONVERT(datetime,CONVERT(date, GETDATE())))
答案 2 :(得分:0)
只需将21 / 24.0添加到今天的日期
magick convert image.png image.gif
第一部分 Select dateadd(day, datediff(day, 1, getDate()), 1) + (21 / 24.0)
,从getdate(),
第二部分dateadd(day, datediff(day, 1, getDate()), 1)
,添加等于上午9点的小部分
这有效,因为在内部,SQL Server将日期时间表示为两个整数,一个表示日期,(自1900年1月1日以来的天数),以及该时间的第二个整数(自午夜以来+ (21 / 24.0)
的数量) ,它组合成一个十进制值,其中整数部分是日期整数,小数部分是一天的分数,所以如果你在一个日期加上0.5,你就会在当天中午等等。
或者,为了进行比较,使用ticks
几个小时,
dateadd