SQL - 按小时、月份等开始

38

我知道如何在SQL(SQL Server)中获取当前日期,但是带有一天的开始:

select dateadd(DAY, datediff(day, 0, getdate()),0) 
(result:2009-09-17 00:00:00.000)

我需要在 SQL 中获取当前时间,但是要以这个小时的开始为准。 例如:2009-09-17 17:00:00(我不关心其精确格式)

另外,我还需要获取当前日期,但是要以这个月的开始为准: 例如:2009-09-01 00:00:00.000(我不关心其精确格式)

你能帮我吗?提前感谢!

7个回答

64

只需调整您当前的一天开始代码!

你想要的是每月开始和每小时开始。这完全相同...

select dateadd(month, datediff(month, 0, getdate()),0) 

select dateadd(hour, datediff(hour, 0, getdate()),0)

13

试试这个:

CAST(CAST(SYSDATETIME() AS DATE) AS DATETIME)

12

最短的一种方法是:CAST(CURRENT_TIMESTAMP AS DATE)


2

试试这个

select DATEADD(hh,17,dateadd(DAY, datediff(day, 0, getdate()),0))

SELECT CAST('01 ' + CAST(DATENAME(MM, getdate()) AS VARCHAR(15)) + CAST(DATEPART(yyyy, GETDATE()) AS VARCHAR(5)) AS DATETIME)

第一:谢谢。第二:你在第一个查询中明确地放置了现在的时间(17),在第二个查询中是01。我不想放这些数字,我需要当前的小时和月份。 - Hagai L
将17更改为DATEPART(hh, GETDATE()),这会获取当前小时,而01代表月初,我有误解吗? - Adriaan Stander

2

或者您可以尝试以下方法:

按天查询:select CONVERT( datetime, convert( varchar(8), getdate(), 112))

按月查询:select CONVERT( datetime, convert( varchar(6), getdate(), 112)+ '01')

按年查询:select CONVERT( datetime, convert( varchar(4), getdate(), 112)+ '0101')


1

从 SQL Server 2022 开始,您可以使用 DATETRUNC 来满足这两个需求。

我需要获取当前日期的开始时间。例如:2009-09-17 17:00:00

SELECT DATETRUNC(hour, GETDATE())

我需要获取当前日期,但是以本月初为起点:例如:2009-09-01 00:00:00.000。
SELECT DATETRUNC(month, GETDATE())

0

针对Postgres

SELECT date_trunc('month', TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40+00')

另一种变体

SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40'); 结果:2001-02-16 20:00:00

SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40'); 结果:2001-01-01 00:00:00

SELECT date_trunc('day', TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40+00'); 结果:2001-02-16 00:00:00-05

SELECT date_trunc('day', TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40+00', 'Australia/Sydney'); 结果:2001-02-16 08:00:00-05

SELECT date_trunc('hour', INTERVAL '3 days 02:47:33'); 结果:3天 02:00:00


这个问题与Postgres无关。如果您有不同的问题,请编写一个新问题并使用相关技术进行标记。如果您对该问题有答案,那么您也可以回答自己的问题。 - Miss Skooter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接