回 帖 发 新 帖 刷新版面

主题:日期计算

请教高手:
出生时间 1978/03/12 1978/05/23等人被我错填成 2078/03/12 2078/05/23,还有其他上百人,在VFP数据库中如何批量减100年。  
我搞不定, 请教了。

回复列表 (共9个回复)

沙发

用以下一条修改命令可以解决
REPLACE ALL 出生时间 WITH
CTOD(PADC(YEAR(出生时间)-100,4)+"."+PADC(MONTH(出生时间),2,"0")+"."+PADC(DAY(出生时间),2,"0"))

板凳

做好备份,试试:
SET CENTURY on
SET DATE to ymd
REPLACE all 时间 with CTOD(STUFF(DTOC(时间),1,4,"1978")) for 时间>CTOD("2077/00/00")

3 楼


谢谢二位热情相助,2楼因是多条命令,我没试。1楼我试了,给出命令后出生日期显示为  /  /   ,另外,对你的命令能否解释一下,我看不懂,致敬

4 楼

REPLACE ALL 出生时间 WITH datetime(YEAR(出生时间)-100,MONTH(出生时间),DAY(出生时间),hour(出生时间),minute(出生时间),second(出生时间))

5 楼


谢谢MOZ
我试了,提示有不能识别的短语或关键字,还请相助.
同时也请各位指教.

6 楼

REPLACE ALL 出生时间 WITH GOMONTH(出生时间,-1200) FOR YEAR(出生时间)>2000

7 楼

说明,使用将日期拆散。对年进行减100后再将日期组合回去的做法,是有问题的。

因为存在闰年的关系。

2000-2-29这个日期是合法的,而将2000-100=1900,再将其他的日期组合回去变成1900-2-29则是非法的,因为1900年不是闰年。

GOMONTH()是将当前日期,以月为单位进行平移,当中已经包含了对闰年的处理,所以是可靠的。感谢微软,感谢CCTV,感谢CCTV门口卖炸糕的大婶。感谢。。。。

8 楼

1.五洲红说的问题应该不会存在,因为他只是输错年份
2.楼主的“时间”应该是“日期”吧?估计没几个人能输时辰八字的吧?
REPLACE ALL 出生日期 WITH date(YEAR(出生日期)-100,MONTH(出生日期),DAY(出生日期))
如果确实是时间的话,把最后一个参数second( )删掉就可以了,是我搞错了,没有这个参数的。

9 楼


感谢wuzhouhon,感谢MOZ,特别是MOZ多次回贴,你们真是高手,二位的方案都解决了我的问题,可惜我看不太懂,通过你们的帮助,对我来讲,学到了东西,再次感谢!
我又开了一个新贴"显示删除标记的记录"
盼你们的参与帮助.

我来回复

您尚未登录,请登录后再回复。点此登录或注册