在SQL Server中设置日期
时间:2020-03-05 18:59:24 来源:igfitidea点击:
在SQL Server中,如何将DATETIME"设置"到秒/分钟/小时/天/年?
假设我的日期为2008-09-17 12:56:53.430,那么Flooring的输出应为:
- 年份:2008-01-01 00:00:00.000
- 月:2008-09-01 00:00:00.000
- 日期:2008-09-17 00:00:00.000
- 时间:2008-09-17 12:00:00.000
- 分钟:2008-09-17 12:56:00.000
- 第二名:2008-09-17 12:56:53.000
解决方案
回答
关键是使用DATEADD和DATEDIFF以及适当的SQL时间跨度枚举。
declare @datetime datetime; set @datetime = getdate(); select @datetime; select dateadd(year,datediff(year,0,@datetime),0); select dateadd(month,datediff(month,0,@datetime),0); select dateadd(day,datediff(day,0,@datetime),0); select dateadd(hour,datediff(hour,0,@datetime),0); select dateadd(minute,datediff(minute,0,@datetime),0); select dateadd(second,datediff(second,'2000-01-01',@datetime),'2000-01-01'); select dateadd(week,datediff(week,0,@datetime),-1); --Beginning of week is Sunday select dateadd(week,datediff(week,0,@datetime),0); --Beginning of week is Monday
请注意,当我们使用秒数进行底数转换时,如果使用0,通常会出现算术溢出。因此,请选择一个已知值,该值一定要小于我们要底线的日期时间。
回答
根据我们使用的样式,CONVERT()函数也可以执行此操作。
回答
不幸的是它不是Oracle,否则我们可以使用trunc()或者to_char()。
但是我在使用SQL Server时遇到了类似的问题,并使用了CONVERT()和DateDiff()方法,如此处所引用
回答
在SQL Server中,有一些技巧可以做到这一点:
SELECT CAST(FLOOR(CAST(CURRENT_TIMESTAMP AS float)) AS DATETIME)
我们将DateTime转换为一个浮点数,该浮点数将Date表示为整数部分,并将Time表示为经过的一天的一部分。切掉该小数部分,然后将其强制转换回DateTime,那一天的开始就是午夜。
这可能比所有DATEADD和DATEDIFF东西更有效。这肯定是更容易键入的方式。
回答
由于PostgreSQL也是" SQL Server",因此我将提及
date_trunc()
哪一个恰好符合要求。
例如:
select date_trunc('hour',current_timestamp); date_trunc ------------------------ 2009-02-18 07:00:00-08 (1 row)