导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

日期字符串,形如 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型呀,如何转呀,如果不转能处理吗?
...全文
61 点赞 收藏 8
写回复
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
二楼的办法可以,但是有没有简便点的呀.
我也想到过这种算法,感觉有点有弯路.但是好方法自已又想不出来.
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告