主题:日期计算
wangwei7j
[专家分:0] 发布于 2008-12-11 01:11:00
请教高手:
出生时间 1978/03/12 1978/05/23等人被我错填成 2078/03/12 2078/05/23,还有其他上百人,在VFP数据库中如何批量减100年。
我搞不定, 请教了。
回复列表 (共9个回复)
沙发
hw2007name [专家分:4790] 发布于 2008-12-11 09:51:00
用以下一条修改命令可以解决
REPLACE ALL 出生时间 WITH
CTOD(PADC(YEAR(出生时间)-100,4)+"."+PADC(MONTH(出生时间),2,"0")+"."+PADC(DAY(出生时间),2,"0"))
板凳
qjbzjp [专家分:8830] 发布于 2008-12-11 10:29:00
做好备份,试试:
SET CENTURY on
SET DATE to ymd
REPLACE all 时间 with CTOD(STUFF(DTOC(时间),1,4,"1978")) for 时间>CTOD("2077/00/00")
3 楼
wangwei7j [专家分:0] 发布于 2008-12-11 16:19:00
谢谢二位热情相助,2楼因是多条命令,我没试。1楼我试了,给出命令后出生日期显示为 / / ,另外,对你的命令能否解释一下,我看不懂,致敬
4 楼
moz [专家分:37620] 发布于 2008-12-12 03:49:00
REPLACE ALL 出生时间 WITH datetime(YEAR(出生时间)-100,MONTH(出生时间),DAY(出生时间),hour(出生时间),minute(出生时间),second(出生时间))
5 楼
wangwei7j [专家分:0] 发布于 2008-12-12 07:41:00
谢谢MOZ
我试了,提示有不能识别的短语或关键字,还请相助.
同时也请各位指教.
6 楼
wuzhouhong [专家分:10890] 发布于 2008-12-12 09:40:00
REPLACE ALL 出生时间 WITH GOMONTH(出生时间,-1200) FOR YEAR(出生时间)>2000
7 楼
wuzhouhong [专家分:10890] 发布于 2008-12-12 09:48:00
说明,使用将日期拆散。对年进行减100后再将日期组合回去的做法,是有问题的。
因为存在闰年的关系。
2000-2-29这个日期是合法的,而将2000-100=1900,再将其他的日期组合回去变成1900-2-29则是非法的,因为1900年不是闰年。
GOMONTH()是将当前日期,以月为单位进行平移,当中已经包含了对闰年的处理,所以是可靠的。感谢微软,感谢CCTV,感谢CCTV门口卖炸糕的大婶。感谢。。。。
8 楼
moz [专家分:37620] 发布于 2008-12-12 16:24:00
1.五洲红说的问题应该不会存在,因为他只是输错年份
2.楼主的“时间”应该是“日期”吧?估计没几个人能输时辰八字的吧?
REPLACE ALL 出生日期 WITH date(YEAR(出生日期)-100,MONTH(出生日期),DAY(出生日期))
如果确实是时间的话,把最后一个参数second( )删掉就可以了,是我搞错了,没有这个参数的。
9 楼
wangwei7j [专家分:0] 发布于 2008-12-12 17:45:00
感谢wuzhouhon,感谢MOZ,特别是MOZ多次回贴,你们真是高手,二位的方案都解决了我的问题,可惜我看不太懂,通过你们的帮助,对我来讲,学到了东西,再次感谢!
我又开了一个新贴"显示删除标记的记录"
盼你们的参与帮助.
我来回复