求一sql语句,把日期convert成yyyymmdd后减若干天,可以自动成为合适日期?

louis_zheng 2003-11-30 04:21:34
例如convert后成为20031201,减一天,为20031130。这样的sql语句要怎么写?
...全文
584 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-12-01
  • 打赏
  • 举报
回复
DATEADD
在向指定日期加上一段时间的基础上,返回新的 datetime 值。

语法
DATEADD ( datepart , number, date )

参数
datepart

是规定应向日期的哪一部分返回新值的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。

日期部分 缩写
Year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms


number

是用来增加 datepart 的值。如果指定一个不是整数的值,则将废弃此值的小数部分。例如,如果为 datepart 指定 day,为 number 指定 1.75,则 date 将增加 1。

date

是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。有关指定日期的更多信息,请参见 datetime 和 smalldatetime。

如果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049(默认),则 49 被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的年份。

返回类型
返回 datetime,但如果 date 参数是 smalldatetime,返回 smalldatetime。

示例
此示例打印出 pubs 数据库中标题的时间结构的列表。此时间结构表示当前发布日期加上 21 天。

USE pubs
GO
SELECT DATEADD(day, 21, pubdate) AS timeframe
FROM titles
GO

下面是结果集:

timeframe
---------------------------
Jul 3 1991 12:00AM
Jun 30 1991 12:00AM
Jul 21 1991 12:00AM
Jul 13 1991 12:00AM
Jun 30 1991 12:00AM
Jul 9 1991 12:00AM
Mar 14 1997 5:09PM
Jul 21 1991 12:00AM
Jul 3 1994 12:00AM
Mar 14 1997 5:09PM
Nov 11 1991 12:00AM
Jul 6 1991 12:00AM
Oct 26 1991 12:00AM
Jul 3 1991 12:00AM
Jul 3 1991 12:00AM
Nov 11 1991 12:00AM
Jul 3 1991 12:00AM
Jul 3 1991 12:00AM

(18 row(s) affected)

pengdali 2003-12-01
  • 打赏
  • 举报
回复
sqlserver是会自动转换字符为日期类型的。
pengdali 2003-12-01
  • 打赏
  • 举报
回复
select dateadd(month,-24,'2002-12-14')
---------------------^^^减
select dateadd(day,-24,'2002-12-14')
----------------^^^天或year年
zjcxc 元老 2003-12-01
  • 打赏
  • 举报
回复

--如果是已经转换后的,要减若干天,再转换回去,就用:

declare @a varchar(10)
set @a='20031201'
set @a=convert(varchar,convert(datetime,@a,112)-1,112)
select 结果=@a
victorycyz 2003-12-01
  • 打赏
  • 举报
回复
要以日期类型进行加减,不要以字符型进行加减。
zjcxc 元老 2003-12-01
  • 打赏
  • 举报
回复
--先减,后转换就行啦.

select convert(varchar,getdate()-1,112)



flystar2 2003-12-01
  • 打赏
  • 举报
回复
set @date=getdate()-1
youngby 2003-11-30
  • 打赏
  • 举报
回复
select replace(convert(char(10), current_timestamp-1,102),'.','')
dlpseeyou 2003-11-30
  • 打赏
  • 举报
回复
(1) select replace(convert(char(10),getdate()-1,20),'-','')

(2) select replace(convert(char(10),dateadd(day,-1,getdate()),20),'-','')
saucer 2003-11-30
  • 打赏
  • 举报
回复
what is the data type for your column? if it is char/varchar/.., try something like

declare @date char(8)
set @date = '20031201'
select convert(char, dateadd(day, -1, convert(datetime,@date)), 112)

34,874

社区成员

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

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