sql 获取当前月的第一天
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 获取当前月的第一天相关的知识,希望对你有一定的参考价值。
Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
这条语句可以获取当月的第一天, 我知道DATEDIFF(mm,0,getdate()) 的意思。查了一下午资料也没明白DATEADD(,,)是干什么 ,是怎么算的。
DATEADD (datepart ,number,date ) datepart 我知道什么意思,number,date 是什么意思呢。
DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
是怎么计算的呢? 最后面的 0 是什么意思
DATEADD (mm,x,0)
在0日期的基础上,加上x个月。
那么就相当于把去掉了日期,只留下了月份,也就是当前月份了。没有日期,也就是第一天的0点了。 参考技术A DATEADD ( datepart , number, date )
datepart 是指日期的部分,年,月,日什么的
number 是要加的数量
date 是指在那个日期基础上加 参考技术B select convert(datetime,(convert(varchar(4),year(getdate()))+'-'+convert(varchar(4),month(getdate()))+'-1'))
以上,希望对你有所帮助! 参考技术C SELECT CONVERT(DATETIME, LEFT(CONVERT(CHAR(8), GETDATE(),112),6) + '01')
试试吧! 参考技术D oracle
本月第一天
:select
trunc(sysdate,'mm')
from
dual
本月最后一天:select
to_char(last_day(sysdate),
'yyyy-mm-dd')
from
dual
如何在sql中从给定的月份和年份获取月份的第一天和最后一天
【中文标题】如何在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 获取当前月的第一天的主要内容,如果未能解决你的问题,请参考以下文章