如何在sql中从给定的月份和年份获取月份的第一天和最后一天
Posted
技术标签:
【中文标题】如何在sql中从给定的月份和年份获取月份的第一天和最后一天【英文标题】:How to get the First day and last day of the month from given month and year in sql 【发布时间】:2014-11-21 14:06:27 【问题描述】:您好,我有一个月份和年份,例如:2014 年第 2 个月和第 2 年
我怎样才能得到那个月的第一天,比如 2014-02-01 和一个月的最后一天 2014-02-28?
我看过很多关于根据给定日期获取月份的第一个和最后一个日期的帖子,但我需要根据给定的月份和年份来获取它
提前致谢
【问题讨论】:
您需要SQL标准、mysql方言还是mssql方言的答案?阅读您帖子的标签不清楚。 有一个月的第一个日期不是“1”吗?!?! 可能这就是MySql没有first_day函数的原因 【参考方案1】:在 SQL Server 2012 及更高版本中
DECLARE @year int = 2014
DECLARE @month int = 12
SELECT
DATEFROMPARTS ( @year, @month, 1) AS MonthStart,
EOMONTH (DATEFROMPARTS ( @year, @month, 1) ) AS MonthEnd
结果
MonthStart MonthEnd
---------- ----------
2014-12-01 2014-12-31
(1 row(s) affected)
更多详情 日期从零件:http://msdn.microsoft.com/en-gb/library/hh213228.aspx EOMONTH:http://msdn.microsoft.com/en-us/library/hh213020.aspx
【讨论】:
【参考方案2】:在 MS SQL Server 2008 上,以下似乎有效:
DECLARE @Month INT = 10;
DECLARE @Year INT = 2016;
DECLARE @FirstDayOfMonth DATETIME = CAST(@Year AS varchar) + '-' + CAST(@Month AS VARCHAR) + '-1';
DECLARE @LastDayOfMonth DATETIME = DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, @FirstDayOfMonth) + 1, 0));
SELECT @FirstDayOfMonth, @LastDayOfMonth; -- 2016-10-01, 2016-10-31
【讨论】:
para el prime dia use otra sintaxis y todo okDECLARE @FirstDayOfMonth DATETIME = '01/'+CAST(@Month AS varchar)+'/'+CAST(@Year AS varchar)
【参考方案3】:
在 mysql 中:
SELECT DATE_SUB(LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)),
INTERVAL DAY(LAST_DAY(DATE_ADD(NOW(), INTERVAL 1 MONTH)))-1 DAY) AS firstOfNextMonth,
LAST_DAY(DATE_ADD(NOW(),
INTERVAL 1 MONTH)) AS lastOfNextMonth
在 sql 服务器中:
select convert(varchar,dateadd(d,-(day(getdate()-1)),getdate()),106) 'Date'
union all
select convert(varchar,dateadd(d,-day(getdate()),dateadd(m,1,getdate())),106)
【讨论】:
【参考方案4】:当月的第一天:
SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)
获取当月的最后一天:
SELECT DATEADD (dd, -1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0))
参考:Get first and last day of month in SQL 2012 and SQL 2008
【讨论】:
【参考方案5】:不是对 OP 的回答,但可能对其他人有帮助
postgres 中的解决方案:
SELECT to_date((2012 || '-' || 9)::text, 'YYYY-MM') AS first_day,
(to_date((2012 || '-' || 9)::text, 'YYYY-MM') + interval '1 month' - interval '1 day')::date AS last_day
【讨论】:
【参考方案6】:不久前我遇到了同样的问题,所以我创建并保存了以下代码。您可以将GetDate()
替换为您自己的列名:
Select
DATEADD(mm, DATEDIFF(mm, 0, Getdate())-1, 0) as '1st day of last month',
dateadd(day,-(day(Getdate())),Getdate()) as 'last day of last month',
dateadd(mm,datediff(mm,0,Getdate()),0)as '1st day of this month',
dateadd(dd,-1,dateadd(mm,Datediff(mm,0,Getdate())+1,0)) as 'last day of this month',
dateadd(mm,datediff(mm,0,Getdate())+1,0) as '1st day of Next month',
Dateadd(dd,-1,dateadd(mm,datediff(mm,0,Getdate())+2,0))as 'Last day of Next month',
【讨论】:
以上是关于如何在sql中从给定的月份和年份获取月份的第一天和最后一天的主要内容,如果未能解决你的问题,请参考以下文章
js-显示指定周数的周一和周日,指定月份的第一天和最后一天-----------个人百度 整理的