各位大侠,帮忙看条语句怎么修改,急!急!~~~

lm126zz 2012-06-20 10:42:23
写了条语句,如下:
delete from dingshi where [Time] <=convert(varchar(50),dateadd(month,-6,getdate()),113)
我想放在作业里面定时每天删除6个月之前的数据,请问能吗?
其中数据表为dingshi,数据字段名为[Time],该字段类型是varchar(50)
请问能实现吗?
我在查询分析器里把delete改成select *,结果找不到改天6月份之前的数据,但是我直接查询dingshi表时(select * from dingshi order by Time desc),却发现了2011-7月份的数据
请问,我该怎么修改才能定时删除6月份之前的数据啊
各位大侠,求指点啊,我快郁闷死了
...全文
167 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
shoppo0505 2012-06-21
  • 打赏
  • 举报
回复
字符串转Date, 或者Date 转 字符串有各种格式,年月日写法,排法都不一样,你必须严格按照格式转换。就像前面说的,这种情况下,Time就应该设置成Date.

自动运行的话,可以将删除写成存储过程,然后用Agent 定时执行SQL任务。
hyc_music1981 2012-06-21
  • 打赏
  • 举报
回复
修改SQL Server服务器的Windows系统时间就可以了
lm126zz 2012-06-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
不应该啊,
'2011-07-29 07:01:42.572'<=convert(varchar(50),dateadd(month,-6,getdate()),120)
是成立的啊,
再这样试试,转换下你的time字段,去掉时间,只保留日期。

SQL code

where convert(varchar(50),dateadd(month,-6,[Time]),23)<=con……
[/Quote]
这位大侠,一语中的啊,找出来问题所在。我照你说的看下系统时间,结果是2011-12-21。请问,我该怎么修改啊
gogodiy 2012-06-21
  • 打赏
  • 举报
回复
既然要使用到这个字段,为什么Time字段要用char类型?万一里面有无法转换成datetime类型的值,你怎么处理?
首先要保证Time字段的值都可以正常转换成datetime类型,如果有特殊值要先处理下。
lm126zz 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
SQL code


where datediff(month,[Time],getdate())>=6
[/Quote]
大侠,我试过了,会越界(错误提示:从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。)你这个不用转换Time或者getdate()类型成一致吗?我的Time是varchar(50)类型的
lm126zz 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
SQL code



delete from dingshi where convert(datetime,[Time]) <=dateadd(month,-6,getdate())
[/Quote]
这个我试过,不行,会报错越界
  • 打赏
  • 举报
回复

where datediff(month,[Time],getdate())>=6
天-笑 2012-06-20
  • 打赏
  • 举报
回复


delete from dingshi where convert(datetime,[Time]) <=dateadd(month,-6,getdate())

cakecc 2012-06-20
  • 打赏
  • 举报
回复
不应该啊,
'2011-07-29 07:01:42.572'<=convert(varchar(50),dateadd(month,-6,getdate()),120)
是成立的啊,
再这样试试,转换下你的time字段,去掉时间,只保留日期。
where convert(varchar(50),dateadd(month,-6,[Time]),23)<=convert(varchar(50),dateadd(month,-6,getdate()),23)


另外 print convert(varchar(50),dateadd(month,-6,getdate()),23) 看看是不是你机器时间有问题。
lm126zz 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
你的这个time字段里面的日期值不规范吧
2011-7月 和 2012-07-01比较,前者的大,所以就没有筛选出来,如果你的是2011-07就可以了,字符串的比较是从第一个逐个比较的。
[/Quote]
不好意思,我的失误。我没写清楚,存在这种时间的2011-07-29 07:01:42.572数据,大概是从7月份到9月份的。我用这个语句没有查到6月份之前的数据,但是我查询整个dingshi表,就能查到6月份之前的数据
是这样的,因为我要做个定时删除作业,所以我得实现查询到6月份的数据,确定下条件没错 ,我才敢删除,现在我都查不到,郁闷啊
cakecc 2012-06-20
  • 打赏
  • 举报
回复
你的这个time字段里面的日期值不规范吧
2011-7月 和 2012-07-01比较,前者的大,所以就没有筛选出来,如果你的是2011-07就可以了,字符串的比较是从第一个逐个比较的。
lm126zz 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
2楼的方法应该是可以的,char到datetime会自动转换,如果报错,应该是你的数据有问题,转换出错。例如你的time字段内有个很离谱的日期。

你也可以把你之前的代码改成
where [Time]<=convert(varchar(50),dateadd(month,-6,getdate()),120) 试试
[/Quote]
你这个确实可以,也没报错。但是我用这个条件查询的时候,竟然没有2011-7月的数据,即查不到6个月之前的数据,但是我直接全部查询的时候就有6月份之前的数据,请问这是为什么啊
cakecc 2012-06-20
  • 打赏
  • 举报
回复
2楼的方法应该是可以的,char到datetime会自动转换,如果报错,应该是你的数据有问题,转换出错。例如你的time字段内有个很离谱的日期。

你也可以把你之前的代码改成
where [Time]<=convert(varchar(50),dateadd(month,-6,getdate()),120) 试试

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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