baiducc2000 发表于 2009-02-13 09:49

求 sybase中删除前5个月的数据的语句!!本人很菜,查了好多资料也没有头绪,求助!!

delete table tablename where TimePoint < dataadd(day,-10,getdate())这个是删除前十天的数据,格式对不对??前5个月应该怎么写呢??


这样写对不对呢?
delete table tablename where TimePoint < month(dateadd(month, -5, getdate()))

谢谢大家了!!

[ 本帖最后由 baiducc2000 于 2009-2-13 09:52 编辑 ]

chenfeng825 发表于 2009-02-13 10:02

dateadd(mm, -5, getdate())

baiducc2000 发表于 2009-02-13 10:25

delete table tablename where TimePoint < month(dateadd(mm, -5, getdate()))

是这样的吗??

WFCJZ 发表于 2009-02-13 10:26

把表结构贴出来帮你写,呵呵

maolinzhou 发表于 2009-02-13 15:18

你最好把表结构贴出来,别整的删错了

baiducc2000 发表于 2009-02-15 15:22

Columns for Table RPT_TR

Field Name                        Type
TIME_STAMP                      Date_Time
RECORD_SOURCE            Number
SUBSCRIBER_ID               String
PACKAGE_ID                      Number
SERVICE_ID                     Number
PROTOCOL_ID                   Number
SAMPLE_SIZE                  Number
PEER_IP                            Number
PEER_PORT                     Number

baiducc2000 发表于 2009-02-15 15:28

sybase是一个软件的数据库,软件本身有个清理过期数据的脚本:
如:清理RPT_TR表中100天前的数据:
delete from RPT_TR where TIME_STAMP < dateadd(dd, -100, getdate())

但是这个语句运行时,就会因为log日志溢出导致清理失败。有没有办法让delete不写日志?

不知道应该怎么处理。

现在先用truncate table RPT_TR将整个表清理了 !!

请教各位老大了!!

chuxu 发表于 2009-02-16 08:36

但是这个语句运行时,就会因为log日志溢出导致清理失败。
这个说明被删除的数据过多,导致log空间满,
可以考虑的办法 一是减少每次删除的数据量,你的要求是删除5个月前的,可以考虑按月删除记录,关键是需要计算一下删除的记录行数以及大概的空间,确认log空间够用。
另外一个方法是将需要留下的数据导入另外一个表备份,然后将原表删除后,将备份的改名,并建立索引的对象。这个方法使用于删除的数据量比保留的数据大很多的情况

camham 发表于 2009-02-17 17:04

回复 #7 baiducc2000 的帖子

delete一定会写日志,多加些日志空间就解决了。
也可以用游标循环删除,例如循环10000次,commit一次,这样不会日志就可以不断truncate。

andylei 发表于 2009-02-19 13:28

使用while循环,例如每个循环delete 10000条,然后commit.很快就完成了。处理的纪录超过10000以上千万别使用cursor,很慢,用while循环结构快很多。
页: [1]
查看完整版本: 求 sybase中删除前5个月的数据的语句!!本人很菜,查了好多资料也没有头绪,求助!!