日期字符串,形如 200712,2007/12 ,这种格式,如何得到前一月,或上一月的字串,如果是datetime型可以用dateadd函数,但是字符串如何办呀?

tdcq123 2008-01-14 11:53:35
日期字符串,形如 200712,2007/12 ,这种格式,如何得到前一月,或上一月的字串,如果是datetime型可以用dateadd函数,但是字符串如何办呀?
--------------
如果是datetime型就好处理了,但是数据库中是字符型,200712表示2007年12月,根据这个字串,我如何得到这个月份的前一个月,上一个月的字串呢?即200801,200711 这种结果,谢谢了.
是不是要先把200712转成datetime型呀,如何转呀,如果不转能处理吗?
...全文
150 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlzd3636 2008-01-16
  • 打赏
  • 举报
回复
上面那段有 瓶颈 如200802 则返回 为20081

下面这段改好了


declare @t table(time varchar(50))
insert into @t values('200802')
select time = datepart(yyyy,dateadd(month,-1,cast(time+ '01' as datetime)))*100 + datepart(mm,dateadd(month,-1,cast(time+ '01' as datetime))) from @t



wzy_love_sly 2008-01-14
  • 打赏
  • 举报
回复
up
liangCK 2008-01-14
  • 打赏
  • 举报
回复
declare @s char(6)
declare @date char(10)
declare @dt datetime
set @s='200712'

set @date=left(@s,4)+'-'+right(@s,2)+'-01'

set @dt=dateadd(month,-1,cast(@date as datetime))

set @s=left(convert(char(10),@dt,120),4)+substring(convert(char(10),@dt,120),6,2)
select @s

/*
------
200711
*/
liangCK 2008-01-14
  • 打赏
  • 举报
回复
declare @s char(6)
declare @date char(10)
set @s='200712'

set @date=left(@s,4)+'-'+right(@s,2)+'-01'

select dateadd(month,-1,cast(@date as datetime))
wlzd3636 2008-01-14
  • 打赏
  • 举报
回复
declare @a varchar(50)
,@b datetime
set @a='200801'
set @a=@a + '01'
set @a=cast(datepart(yyyy,dateadd(mm,-1,cast(@a as datetime))) as varchar(50)) + cast(datepart(mm,dateadd(mm,-1,cast(@a as datetime))) as varchar(50))
print @a

/*
200712
*/
ybl_1987 2008-01-14
  • 打赏
  • 举报
回复
五楼正解
wzy_love_sly 2008-01-14
  • 打赏
  • 举报
回复
declare @s char(6)
declare @date char(10)
set @s='200712'

select dateadd(mm,-1,@s+'01')
tdcq123 2008-01-14
  • 打赏
  • 举报
回复
二楼的办法可以,但是有没有简便点的呀.
我也想到过这种算法,感觉有点有弯路.但是好方法自已又想不出来.

34,838

社区成员

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

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