写了条语句,如下:
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月份之前的数据啊
各位大侠,求指点啊,我快郁闷死了

解决方案 »

  1.   

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

  2.   


    where datediff(month,[Time],getdate())>=6
      

  3.   

    大侠,我试过了,会越界(错误提示:从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。)你这个不用转换Time或者getdate()类型成一致吗?我的Time是varchar(50)类型的
      

  4.   

    2楼的方法应该是可以的,char到datetime会自动转换,如果报错,应该是你的数据有问题,转换出错。例如你的time字段内有个很离谱的日期。你也可以把你之前的代码改成
    where [Time]<=convert(varchar(50),dateadd(month,-6,getdate()),120) 试试
      

  5.   

    你的这个time字段里面的日期值不规范吧
    2011-7月 和 2012-07-01比较,前者的大,所以就没有筛选出来,如果你的是2011-07就可以了,字符串的比较是从第一个逐个比较的。
      

  6.   

    不好意思,我的失误。我没写清楚,存在这种时间的2011-07-29 07:01:42.572数据,大概是从7月份到9月份的。我用这个语句没有查到6月份之前的数据,但是我查询整个dingshi表,就能查到6月份之前的数据
    是这样的,因为我要做个定时删除作业,所以我得实现查询到6月份的数据,确定下条件没错 ,我才敢删除,现在我都查不到,郁闷啊
      

  7.   

    不应该啊,
    '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) 看看是不是你机器时间有问题。
      

  8.   

    既然要使用到这个字段,为什么Time字段要用char类型?万一里面有无法转换成datetime类型的值,你怎么处理?
    首先要保证Time字段的值都可以正常转换成datetime类型,如果有特殊值要先处理下。
      

  9.   

    修改SQL Server服务器的Windows系统时间就可以了
      

  10.   

    字符串转Date, 或者Date 转 字符串有各种格式,年月日写法,排法都不一样,你必须严格按照格式转换。就像前面说的,这种情况下,Time就应该设置成Date.自动运行的话,可以将删除写成存储过程,然后用Agent 定时执行SQL任务。