如何在SQL中获取月份日期
是否有一种方法可以使用以下场景在SQL中获取特定日期 日期是20号:如何在SQL中获取月份日期,sql,sql-server,Sql,Sql Server,是否有一种方法可以使用以下场景在SQL中获取特定日期 日期是20号: 如果本月的日期是2017年1月23日,则我希望从2017年1月20日起获得所有信息,即3天 如果本月的日期是2017年1月17日,那么我希望从2016年12月20日开始获取所有信息 因此,焦点是本月的20号或基于当前日期的上一个月 关于如何在SQL中构造此表达式,您有什么想法吗?此表达式应在过去一个月的最近20日找到: select DATEADD(month, DATEDIFF(month,'2001
关于如何在SQL中构造此表达式,您有什么想法吗?此表达式应在过去一个月的最近20日找到:
select
DATEADD(month,
DATEDIFF(month,'20010101',GETDATE()),
CASE WHEN DATEPART(day,GETDATE()) < 20 THEN '20001220'
ELSE '20010120' END)
选择
日期(月),
DATEDIFF(月'20010101',GETDATE()),
DATEPART(day,GETDATE())小于20然后为'20001220'时的情况
其他"20010120"(完)
它的工作原理是计算过去某个固定日期与今天之间的总月数
然后我们把这个月数加到另一个固定的日期上——一个月的20号。但是我们使用
CASE
来确定第二个固定日期与第一个固定日期之间的关系-是同一个月还是上一个月?您可以始终使用month(date字段)
来获取日期月份的数值,您只需对上一个月、年(date字段)执行-1即可
的工作原理与此相同。我通常为此类操作构建一些函数,它可以及时更改,并且易于修改
CREATE FUNCTION GetDates(@Day int)
RETURNS @DateRange TABLE
(
StartDate DATETIME,
EndDate DATETIME
)
AS
BEGIN
DECLARE @StartDate VARCHAR(30),
@EndDate VARCHAR(30),
@CurDate DATETIME,
@CurDay INT;
SET @CurDate = GETDATE();
SET @CurDay = DAY(GETDATE());
SET @EndDate = CONVERT(VARCHAR(30), @CurDate, 112);
IF @CurDay <= @Day
BEGIN
SET @StartDate = CONVERT(VARCHAR(30), DATEADD(day, (@Day - @CurDay), DATEADD(month, -1, @CurDate)), 112);
END
ELSE
BEGIN
SET @StartDate = CONVERT(VARCHAR(30), DATEADD(day, (@Day - @CurDay), @CurDate), 112);
END
INSERT INTO @DateRange VALUES (CAST(@StartDate AS DATETIME), CAST(@EndDate AS DATETIME));
RETURN
END
GO
您可以试试。您使用的是什么数据库管理系统?你的日期栏是什么样的?请举例说明您正在使用的数据库管理系统。(许多产品在日期/时间方面远远不符合ANSI SQL。)还添加一些示例表数据和预期结果-以及格式良好的文本。如果日期是20号,那么是上个月还是下个月的数据呢?SQL Server是DBMS请编辑您的问题,以包括相关表DDL,一些示例日期为DML,以及预期的结果\
select StartDate, EndDate from GetDates(14);