字符串年月取上个月

wa3hbl28 2017-11-04 09:03:00
字符串格式'201708'
如何计算出上月为'201707'
...全文
797 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
早起晚睡 2017-12-17
  • 打赏
  • 举报
回复
引用 17 楼 u010376948 的回复:
2005 declare @as_date varchar(6) SET @as_date='201708' select convert(varchar(6),dateadd(mm,-1,@as_date+'01'),112)
还是这个各个版本都能用
小猫阿尤 2017-12-14
  • 打赏
  • 举报
回复
不错 学习了
xmniemaosheng 2017-12-11
  • 打赏
  • 举报
回复
2005 declare @as_date varchar(6) SET @as_date='201708' select convert(varchar(6),dateadd(mm,-1,@as_date+'01'),112)
hanghangz 2017-11-15
  • 打赏
  • 举报
回复
select * into #Table from( select '201712' a union all select '201711' a union all select '201707' a union all select '201704' a union all select '201701' ) T select * from #Table select cast(a+'01' as datetime) from #Table select replace( convert(varchar(7), dateadd(day, -1,cast(a+'01' as datetime)),121),'-','') from #Table drop table #Table
吉普赛的歌 版主 2017-11-14
  • 打赏
  • 举报
回复
引用 11 楼 xzxmustwin 的回复:
[quote=引用 5 楼 yenange 的回复:]
--SQL Server2012+
DECLARE @s VARCHAR(20)='201708'
SELECT Format(EOMONTH(@s+'01',-1),'yyyyMM')
/*
(无列名)
201707
*/
'EOMONTH' 2008R2识别不了,我在考虑要不要换成12以上的。[/quote] 要换就换 2014 sp2 或 2016 sp1 , 既然要升级, 为什么不用最新的。 2014 sp2 已经是非常稳定的版本了。 http://blog.csdn.net/yenange/article/details/50549937 http://blog.csdn.net/yenange/article/details/52980135
xzxmustwin 2017-11-14
  • 打赏
  • 举报
回复
引用 5 楼 yenange 的回复:
--SQL Server2012+
DECLARE @s VARCHAR(20)='201708'
SELECT Format(EOMONTH(@s+'01',-1),'yyyyMM')
/*
(无列名)
201707
*/
'EOMONTH' 2008R2识别不了,我在考虑要不要换成12以上的。
xzxmustwin 2017-11-14
  • 打赏
  • 举报
回复
引用 14 楼 yenange 的回复:
[quote=引用 13 楼 xzxmustwin 的回复:] [quote=引用 12 楼 yenange 的回复:] [quote=引用 11 楼 xzxmustwin 的回复:] [quote=引用 5 楼 yenange 的回复:]
--SQL Server2012+
DECLARE @s VARCHAR(20)='201708'
SELECT Format(EOMONTH(@s+'01',-1),'yyyyMM')
/*
(无列名)
201707
*/
'EOMONTH' 2008R2识别不了,我在考虑要不要换成12以上的。[/quote] 要换就换 2014 sp2 或 2016 sp1 , 既然要升级, 为什么不用最新的。 2014 sp2 已经是非常稳定的版本了。 http://blog.csdn.net/yenange/article/details/50549937 http://blog.csdn.net/yenange/article/details/52980135 [/quote] 是的,我是想换新的稳定的版本 可以学更多新的特性。 但是现在项目里面别人都是统一的2008R2,我担心的是到时候会出问题。 就是之前看到你们在讨论用什么版本的帖子我才产生换的想法的。 我是个刚入门的菜鸟,接触这方面不到3个月。[/quote] 先学习再说, 你不可能在一个公司呆一辈子吧? 另外, 你也可以影响其它人来学习高版本, 你告诉人家新版本有足够的诱惑力时, 他们(包括你的上司)自然会升级高版本的了。 当然, 新版本的好处, 你还得多学习[/quote] 要得 版主大大!
吉普赛的歌 版主 2017-11-14
  • 打赏
  • 举报
回复
引用 13 楼 xzxmustwin 的回复:
[quote=引用 12 楼 yenange 的回复:] [quote=引用 11 楼 xzxmustwin 的回复:] [quote=引用 5 楼 yenange 的回复:]
--SQL Server2012+
DECLARE @s VARCHAR(20)='201708'
SELECT Format(EOMONTH(@s+'01',-1),'yyyyMM')
/*
(无列名)
201707
*/
'EOMONTH' 2008R2识别不了,我在考虑要不要换成12以上的。[/quote] 要换就换 2014 sp2 或 2016 sp1 , 既然要升级, 为什么不用最新的。 2014 sp2 已经是非常稳定的版本了。 http://blog.csdn.net/yenange/article/details/50549937 http://blog.csdn.net/yenange/article/details/52980135 [/quote] 是的,我是想换新的稳定的版本 可以学更多新的特性。 但是现在项目里面别人都是统一的2008R2,我担心的是到时候会出问题。 就是之前看到你们在讨论用什么版本的帖子我才产生换的想法的。 我是个刚入门的菜鸟,接触这方面不到3个月。[/quote] 先学习再说, 你不可能在一个公司呆一辈子吧? 另外, 你也可以影响其它人来学习高版本, 你告诉人家新版本有足够的诱惑力时, 他们(包括你的上司)自然会升级高版本的了。 当然, 新版本的好处, 你还得多学习
xzxmustwin 2017-11-14
  • 打赏
  • 举报
回复
引用 12 楼 yenange 的回复:
[quote=引用 11 楼 xzxmustwin 的回复:] [quote=引用 5 楼 yenange 的回复:]
--SQL Server2012+
DECLARE @s VARCHAR(20)='201708'
SELECT Format(EOMONTH(@s+'01',-1),'yyyyMM')
/*
(无列名)
201707
*/
'EOMONTH' 2008R2识别不了,我在考虑要不要换成12以上的。[/quote] 要换就换 2014 sp2 或 2016 sp1 , 既然要升级, 为什么不用最新的。 2014 sp2 已经是非常稳定的版本了。 http://blog.csdn.net/yenange/article/details/50549937 http://blog.csdn.net/yenange/article/details/52980135 [/quote] 是的,我是想换新的稳定的版本 可以学更多新的特性。 但是现在项目里面别人都是统一的2008R2,我担心的是到时候会出问题。 就是之前看到你们在讨论用什么版本的帖子我才产生换的想法的。 我是个刚入门的菜鸟,接触这方面不到3个月。
wtujedp 2017-11-09
  • 打赏
  • 举报
回复
引用 9 楼 jscshe 的回复:
[quote=引用 8 楼 yenange 的回复:] [quote=引用 7 楼 wwfxgm 的回复:] [quote=引用 5 楼 yenange 的回复:]
--SQL Server2012+
DECLARE @s VARCHAR(20)='201708'
SELECT Format(EOMONTH(@s+'01',-1),'yyyyMM')
/*
(无列名)
201707
*/
这个好用的很[/quote] 你喊楼主来结贴[/quote] +'01' 是什么意思! [/quote] 凑成一个完整的日期格式
Cs_Eric_Hew 2017-11-09
  • 打赏
  • 举报
回复
引用 8 楼 yenange 的回复:
[quote=引用 7 楼 wwfxgm 的回复:] [quote=引用 5 楼 yenange 的回复:]
--SQL Server2012+
DECLARE @s VARCHAR(20)='201708'
SELECT Format(EOMONTH(@s+'01',-1),'yyyyMM')
/*
(无列名)
201707
*/
这个好用的很[/quote] 你喊楼主来结贴[/quote] +'01' 是什么意思!
吉普赛的歌 版主 2017-11-09
  • 打赏
  • 举报
回复
引用 7 楼 wwfxgm 的回复:
[quote=引用 5 楼 yenange 的回复:]
--SQL Server2012+
DECLARE @s VARCHAR(20)='201708'
SELECT Format(EOMONTH(@s+'01',-1),'yyyyMM')
/*
(无列名)
201707
*/
这个好用的很[/quote] 你喊楼主来结贴
wwfxgm 2017-11-09
  • 打赏
  • 举报
回复
引用 5 楼 yenange 的回复:
--SQL Server2012+
DECLARE @s VARCHAR(20)='201708'
SELECT Format(EOMONTH(@s+'01',-1),'yyyyMM')
/*
(无列名)
201707
*/
这个好用的很
zbdzjx 2017-11-06
  • 打赏
  • 举报
回复
with t1(dt) as ( select '201712' union all select '201711' union all select '201707' union all select '201704' union all select '201701' ) select dt, CONVERT(varchar, convert(int, dt)- case when SUBSTRING(dt, 5, 2)='01' then 89 else 1 end) from t1
  • 打赏
  • 举报
回复
format 是个好东西~
吉普赛的歌 版主 2017-11-06
  • 打赏
  • 举报
回复
--SQL Server2012+
DECLARE @s VARCHAR(20)='201708'
SELECT Format(EOMONTH(@s+'01',-1),'yyyyMM')
/*
(无列名)
201707
*/
  • 打赏
  • 举报
回复
可以用数学的方法
declare @ym varchar(6)=201707
select [本月]=@ym,[上个月]=  @ym-1-(1-sign(@ym % 100-1))*88
set @ym=201701
select [本月]=@ym,[上个月]= @ym-1-(1-sign(@ym % 100-1))*88
/*
本月	上个月
201707	201706

本月	上个月
201701	201612
*/
二月十六 版主 2017-11-04
  • 打赏
  • 举报
回复
DECLARE @str NVARCHAR(100)='201708'
SELECT CONVERT(VARCHAR(6),DATEADD(MONTH,-1,CONVERT(DATE,@str+'01')),112)


日月路明 2017-11-04
  • 打赏
  • 举报
回复
declare @str varchar(20),@dt datetime
set @str='201708'
set @str=left(@str,4)+'-'+substring(@str,5,100)+'-1'
set @dt=DateAdd(month,-1,@str)
select replace(convert(varchar(7),@dt,20),'-','')

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧