1. sql 如何取当季最后一个月的第一天
oracle(本季度第一天+两个月=本季度最后一个月第一天)
SELECT to_char(add_months(TRUNC(SYSDATE, 'Q'), 2), 'YYYY-MM-DD') FROM al;
sqlserver:还是先找到当前季度的第一天然后加两个月
Select DATEADD(mm,2,DATEADD(qq, DATEDIFF(qq,0,getdate()), 0))
mysql:想不出来,mysql的函数很多都是关于天的,而且太久没用,差不多都还给书本了。
其实也可以用case when来写,首先判断当前时间是第几季度,然后用case when来写,等于1就是3.1,等于2就是6.1,以此类推,这个应该不算很麻烦,判断三次,就可以了。
2. 获取本月、本季、本年第一天和最后一天等等sql(sql server)
转自: http://blog.itpub.net/183473/viewspace-723253
--DATEDIFF ( datepart , startdate , enddate )
--DATEDIFF函数计算两个日期之间的小时、天、周、月、年等时间间隔总数
--DATEADD ( datepart , number, date )
--DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期
--计算一个月第一天
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
--本周的星期一,这里我是用周(wk)的时间间隔来计算哪一天是本周的星期一。
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
--一年的第一天,现在用年(yy)的时间间隔来显示这一年的第一天。
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
--季度的第一天,假如你要计算这个季度的第一天,这个例子告诉你该如何做。
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
--上个月的最后一天,这是一个计算上个月最后一天的例子。它通过从一个月的最后一天这个例子上减去3毫秒来获得。有一点要记住,在Sql Server中时间是精确到3毫秒。这就是为什么我需要减去3毫秒来获得我要的日期和时间。
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
--去年的最后一天,连接上面的例子,为了要得到去年的最后一天,你需要在今年的第一天上减去3毫秒。
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
--本月的最后一天,现在,为了获得本月的最后一天,我需要稍微修改一下获得上个月的最后一天的语句。修改需要给用DATEDIFF比较当前日期和“1900-01-01”返回的时间间隔上加1。通过加1个月,我计算出下个月的第一天,然后减去3毫秒,这样就计算出了这个月的最后一天。这是计算本月最后一天的SQL脚本。
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
--本年的最后一天,你现在应该掌握这个的做法,这是计算本年最后一天脚本
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
--本月的第一个星期一,好了,现在是最后一个例子。这里我要计算这个月的第一个星期一。这是计算的脚本。
SELECT DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)
--a. 本月的第一天
select dateadd(mm, datediff(mm,0,getdate()), 0) AS 本月的第一天
--b. 本月的最后一天
select dateadd(ms,-3,dateadd(mm, datediff(mm,0,getdate())+1, 0)) AS 本月的最后一天
--c. 上个月的最后一天
select dateadd(ms,-3,dateadd(mm, datediff(mm,0,getdate()), 0)) AS 上个月的最后一天
--d. 本周的星期一
select dateadd(wk, datediff(wk,0,getdate()), 0) AS 本周的星期一
--e. 本季度的第一天
select dateadd(qq, datediff(qq,0,getdate()), 0) AS 本季度的第一天
--f. 本季度的最后一天
select DATEADD(ms,-3,dateadd(qq, datediff(qq,0,getdate())+1, 0)) AS 本季度的最后一天
--g. 本月的第一个星期一
select dateadd(wk, datediff(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0) AS 本月的第一个星期一
--h. 本年的第一天
select dateadd(yy, datediff(yy,0,getdate()), 0) AS 本年的第一天
--i. 本年的最后一天
select dateadd(ms,-3,dateadd(yy, datediff(yy,0,getdate())+1, 0)) AS 本年的最后一天
--f. 去年的最后一天
select dateadd(ms,-3,dateadd(yy, datediff(yy,0,getdate()), 0)) AS 去年的最后一天
3. sql如何取某年某月的第一天和最后一天
SELECT CAST((LEFT('20093',4)+'-'+SUBSTRING('20093',5,LEN('20093'))+'-'+'01') AS DATETIME)--第一天
SELECT DATEADD(DAY,-1,DATEADD(MONTH,1,CAST((LEFT('20093',4)+'-'+SUBSTRING('20093',5,LEN('20093'))+'-'+'01') AS DATETIME)))--最后一天
原理:第一天肯定是1号拉,最后一天是下个月第一天减一天。
本月第一天
SELECT dateadd(ms,-1,DATEADD(mm, DATEDIFF(m,0,getdate()), 0)) as mouthlastdate
下月第一天:
SELECT dateadd(ms,-1,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) as mouthlastdate
下下月第一天:
SELECT dateadd(ms,-1,DATEADD(mm, DATEDIFF(m,0,getdate())+2, 0)) as mouthlastdate
(3)返回当季最后一天sql函数扩展阅读
sqlserver 时间格式函数详细
--getdate 获取当前时间
select getdate()
--dateadd 原有时间加: 2013-02-17 13:20:16 此时间加12个月
select dateadd(MONTH,12,'2013-02-17 13:20:16') --返回:2014-02-17 13:20:16.000 (参数month可以改为 day,year等日期加相应的值)
--datediff 两个时间的差 (后面-前面=返回值)
select datediff(day,'2013-02-01','2013-02-18') --返回:17 (参数day可以改为 month,year等日期加相应的值)
--datepart 获取日期的某个部分整数
select DATEPART(month, '2013-2-17') --返回 2 (参数month可以改为 day,year等日期加相应的值)
--datename 获取指定部位的字符串
select datename(weekday, '2013-2-17') --返回 星期日 (参数weekday可以改为 day,year等日期加相应的值)
--day(), month(),year() 获取指定部位的字符串
select day('2013-2-15') --返回15
4. 写出取当月最后一天的SQL语句
last_day(date)
这个函数可以返回当月最后一天的日期,date为日期类型!
对了,你用的是什么数据库
5. 用SQL获取某个某年某个月份的最后一天的日期
/*
思路:首先把某日期的月份加一,再把结果的日期减一
*/
DECLARE @Date AS DATETIME
DECLARE @DateChar AS nVarChar(19)
--给日期赋值
SET @Date = GetDate()
--返回你需要的
SET @DateChar = CONVERT(Char(8), @Date, 120) + '01 00:00:00'
SELECT DATEADD(d, -1, DATEADD(m, 1, CAST(@DateChar AS DATETIME)))
6. SQL语句:取某个日期所在季度的最后一天,精确到时分秒
取季度数字然后再CASE WHEN 就好啦﹐参考以下代码
DECLARE@TBTABLE(TIMEDATETIME)
INSERTINTO@TBVALUES('2013-02-0911:22:59.997')
INSERTINTO@TBVALUES('2013-05-0713:12:51.333')
INSERTINTO@TBVALUES('2013-07-0715:42:22.633')
INSERTINTO@TBVALUES('2013-10-2019:29:22.783')
SELECT*,CASEWHENDATEPART(QQ,TIME)=1THENDATEADD(D,-1,'2013-04-0123:59:59.997')
WHENDATEPART(QQ,TIME)=2THENDATEADD(D,-1,'2013-07-0123:59:59.997')
WHENDATEPART(QQ,TIME)=3THENDATEADD(D,-1,'2013-10-0123:59:59.997')
WHENDATEPART(QQ,TIME)=4THENDATEADD(D,-1,'2014-01-0123:59:59.997')
ENDASQUARTER
FROM@TB
效果:
TIME QUARTER
---------------------------------- - -----------------------------------
2013-02-09 11:22:59.997 2013-03-31 23:59:59.997
2013-05-07 13:12:51.333 2013-06-30 23:59:59.997
2013-07-07 15:42:22.633 2013-09-30 23:59:59.997
2013-10-20 19:29:22.783 2013-12-31 23:59:59.997
7. SQL 返回当前季度的函数的祥细过程
本季度的第一天
SELECT trunc(SYSDATE,'q') FROM DUAL;
第x季度
SELECT to_char(SYSDATE,'q') FROM DUAL;
8. 如果给定一个年月,如:201204,怎么用SQL函数取该月份的第一天和最后一天,显示如:20120401
oracle 可以写个函数
CREATE OR REPLACE FUNCTION SF_GETYMD
(
PI_RQ0000 IN VARCHAR2, --日期
PI_BS0000 IN VARCHAR2 --标示 0,1,2
)
RETURN VARCHAR2
AS
LS_RETURN VARCHAR2(8);
BEGIN
IF PI_RQ0000 IS NULL THEN
LS_RETURN := to_char(sysdate,'yyyymmdd');
elsIF PI_BS0000='0' THEN
LS_RETURN := SUBSTR(PI_RQ0000,1,6)||'01';
ELSIF PI_BS0000='1' THEN
LS_RETURN := TO_CHAR(LAST_DAY(TO_DATE(PI_RQ0000,'YYYY-MM')),'YYYYMMDD');
ELSIF PI_BS0000='2' THEN
LS_RETURN := TO_CHAR(last_day(add_months(TO_DATE(PI_RQ0000,'YYYY-MM'),-1)),'YYYYMMDD');
END IF;
RETURN LS_RETURN;
END SF_GETYMD;
9. 在sql server 中如何获取当月最后一天
语句如下:
selectconvert(varchar(10),dateadd(d,-1,convert(varchar(7),dateadd(m,1,getdate()),120)+'-01'),120)
执行结果如图:
延伸阅读:
SQL Server CONVERT() 函数
定义和用法
CONVERT() 函数是把日期转换为新数据类型的通用函数。
CONVERT() 函数可以用不同的格式显示日期/时间数据。
语法
CONVERT(data_type(length),data_to_be_converted,style)
SQL Server DATEADD() 函数
定义和用法
DATEADD() 函数在日期中添加或减去指定的时间间隔。
语法
DATEADD(datepart,number,date)