Office中国论坛/Access中国论坛

标题: [求助]日期计算问题,又有新的问题高手请解答,谢谢 [打印本页]

作者: focke    时间: 2005-9-14 07:03
标题: [求助]日期计算问题,又有新的问题高手请解答,谢谢
有两字段:A B 分别是1981年5月23日  2005年3月5日 求相差几年几月天数可忽略

[此贴子已经被作者于2005-9-22 21:58:17编辑过]


作者: focke    时间: 2005-9-14 07:36
我顶
作者: huanghai    时间: 2005-9-15 05:59
以下是引用focke在2005-9-13 23:03:00的发言:

两字段:A B 分别是1981年5月23日  2005年3月5日 求相差几年几月天数可忽略



估计你想做到如[23年零10个月]这样的效果,如果是这样的话,思路应该先算出多少个月,方法是,然后再除12看结果与余数

    Dim allMonths As Integer   '总共多少个月

    Dim Y As Integer, M As Integer

    allMonths = DateDiff("m", #5/23/1981#, #3/5/2005#)

    Y = Int(allMonths / 12)

    M = allMonths Mod 12

    If M > 0 Then

        Debug.Print Y & "年零" & M & "个月"

    Else

        Debug.Print Y & "年整"

    End If


作者: xia_swift    时间: 2005-9-15 22:17
学习了
作者: focke    时间: 2005-9-16 02:39
这个程序可直接写入,查询的字段里吗
作者: nxjswt    时间: 2005-9-16 04:47
奉献一个学习来的,可以根据您的实际修改加入SQL

a.记账日期-(SELECT max([a]![记账日期]) FROM a WHERE  (a.姓名编码=a_1.姓名编码 and a.a编码<a_1.a编码)) AS 天数[em02]

[此贴子已经被作者于2005-9-15 20:47:54编辑过]


作者: focke    时间: 2005-9-17 09:58
这个程序可直接写入,查询的字段里吗
作者: wu8313    时间: 2005-9-17 16:44
在标准模块中写如下代码:

------------------------------

Option Compare Database

Option Explicit

Function months_count(allMonths As Integer, Y As Integer, M As Integer) As String

   ' Dim allMonths As Integer   '总共多少个月

   ' Dim Y As Integer, M As Integer

   ' allMonths = DateDiff("m", #5/23/1981#, #3/5/2005#)

    Y = Int(allMonths / 12) '在查询中调用的时候,根据字段名称作了相应更改 y=[时间差]/12

    M = allMonths Mod 12 '在查询中调用的时候,根据字段名称作了相应更改 m=[时间差] mod 12

    If M > 0 Then

        Debug.Print Y & "年零" & M & "个月"

        months_count = Y & "年零" & M & "个月"

    Else

        Debug.Print Y & "年整"

        months_count = Y & "年零" & M & "个月"

    End If

End Function

----------------------------------------------------

在查询窗格中截图如下:

[attach]13163[/attach]

----------------------------------------------

上传我根据huanghai 老师代码做出的例子:

[attach]13164[/attach]

-------------------------------------------

另外,给出 datediff 函数的帮助:

DateDiff 函数示例

以下示例使用了 DateDiff 函数分别计算某年的第一周和今天之间的周数,及从一九九五年二月一日至今天的天数。

Debug.Print DateDiff("ww", "1-1", Now())

Debug.Print DateDiff("y", #1-Feb-1995#, Now())

下个示例显示出如何在查询表达式中使用 DateDiff 函数。假设有一个包含“订购日期”字段及“发货日

期”字段的“订单”表。可以在查询中创建一个计算字段显示在每个订单的订单日期及发货日期之间的逝去时间。在“查询”窗口中,通过添加“订单”表并将“订单ID”字段拖到查询设计网格中创建了一个新查询。在空的“字段”单元格中,输入下列表达式,创建一个计算字段。

DaysElapsed: DateDiff("y", [OrderDate], [ShippedDate])

-----------------------------------



[此贴子已经被作者于2005-9-17 8:47:55编辑过]


作者: focke    时间: 2005-9-18 02:13
不用SQL语言,在查询中用一个字段可以完成吗
作者: wu8313    时间: 2005-9-18 03:23
以下是引用focke在2005-9-17 18:13:00的发言:

不用SQL语言,在查询中用一个字段可以完成吗

我上传的附件中,就是使用一个字段完成的,调用标准模块中的代码的呀。



不知道,附件你看了没有。

---------------------------------

access的内置函数解决不了你在顶楼提出的问题,所以 huanghai 老师写了自定义的过程,我只是调用了一下,做了实例给你。

------------------------



[此贴子已经被作者于2005-9-17 19:24:36编辑过]


作者: hi-wzj    时间: 2005-9-18 20:26
直接用datediff函数即可。
作者: zaigang_zhou    时间: 2005-9-19 06:35
我顶


作者: focke    时间: 2005-9-20 17:37
我是这样改的的,高手看有没有毛病,感谢wu8313 huanghai 以及大家的帮助Option Compare DatabaseFunction months_count(allMonths As Integer, Y As Integer, M As Integer) As String

   ' Dim allMonths As Integer   '总共多少个月

   ' Dim Y As Integer, M As Integer

   ' allMonths = DateDiff("m", #5/23/1981#, #3/5/2005#)    Y = Int(allMonths / 12) '在查询中调用的时候,根据字段名称作了相应更改 y=[时间差]/12    M = allMonths Mod 12 '在查询中调用的时候,根据字段名称作了相应更改 m=[时间差] mod 12    If M > 0 And Y <> 0 Then

        

        Debug.Print Y & "年零" & M & "个月"

        months_count = Y & "年零" & M & "个月"

    Else        Debug.Print Y & "年整"

        months_count = Y & "年整"    End If

   

    If Y = 0 Then

   

        Debug.Print M & "个月"

        months_count = M & "个月"

        

    End If

End Function


作者: zyz218    时间: 2005-9-20 19:28
直接写到窗体中或报表不是更好吗,干吗写到模块中呢
作者: focke    时间: 2005-9-20 22:01
可以直接写到查询里吗
作者: focke    时间: 2005-9-23 05:55
问题;象 5年,8年3个月,这样的数据能否设成日期型的数据。如,1987年7月3日 减去 8年3个月 结果是 1979年4个月3日这样的计算如何设计,请高手解答。问题:象 个人简历,自我介绍,的字段应设计成什么数据类型,XXXX年-XXXX年   XXX单位    XXXX职务XXXX年-XXXX年   XXX单位    XXXX职务这样的数据如何输入 个人简历字段里,显示时能全部显示吗
作者: GORYUNGBBS    时间: 2005-9-23 06:26
ACCESS内置函数就可以计算的.如下:间隔: IIf((Month([n2])-Month([n1]))<0,Year([n2])-Year([n1])-1,Year([n2])-Year([n1])) & "年" & IIf((Month([n2])-Month([n1]))<0,Month([n2])-Month([n1])+12,Month([n2])-Month([n1])) & "月"
作者: dengjian    时间: 2005-9-23 17:45
似乎不用这么复杂吧,我记得曾用iif函数计算某人到某年某月为止的年龄,不过忘了具体公式,思路大体是这样的:通过计算现在到1900年的天数减去出生年月到1900年的天数,然后再转化为年月数,既简单又方便。楼主的问题应该也可这样求解。
作者: 静儿    时间: 2005-9-23 21:48
大家要善于使用日期函数:dateadd;datediff;datepart 具体看帮助,有详细的解释和帮助。
作者: LucasLynn    时间: 2005-9-23 23:31
不需要这么复杂,用DateDiff函数即可,参数用月,然后自己整除一下12得年,MOD 12得月。
作者: focke    时间: 2005-9-24 04:34
16楼的问题谁能解答
作者: focke    时间: 2005-9-28 07:21


16楼的问题谁能解答
作者: LucasLynn    时间: 2005-9-28 07:26
我和静儿都告诉你了,请不要没有实质内容的顶贴了。
作者: LucasLynn    时间: 2005-9-28 07:38
以下是引用focke在2005-9-22 21:55:00的发言:



问题;

象 5年,8年3个月,这样的数据能否设成日期型的数据。如,1987年7月3日 减去 8年3个月 结果是 1979年4个月3日

这样的计算如何设计,请高手解答。

问题:

象 个人简历,自我介绍,的字段应设计成什么数据类型,

XXXX年-XXXX年   XXX单位    XXXX职务

XXXX年-XXXX年   XXX单位    XXXX职务

这样的数据如何输入 个人简历字段里,显示时能全部显示吗



问题一:

不可能通过任何一个内置函数完成,因为你这样的减法是完全不科学的,如果你一定要这样来计算结果,可以自己写一段代码,分别取出日期中的年,月,日,然后分别相减,记得要进行减法退位判断,然后再合并成一个日期。

问题二:

整个内容作为一个备注类型字段。
作者: focke    时间: 2005-10-8 04:47
象 5年,8年3个月如何分别取出日期中的年,月,日,然后分别相减???
作者: focke    时间: 2005-10-8 04:50
象 5年,8年3个月,这样的数据能否设成日期型的数据。
作者: focke    时间: 2005-10-17 07:49
象 5年,8年3个月,这样的数据能否设成日期型的数据
作者: focke    时间: 2005-10-17 07:50
象 5年,8年3个月,这样的数据能否设成日期型的数据
作者: j13583    时间: 2005-10-17 20:48
不知道这样对吗?



SELECT Tab1.A, Tab1.B, Int(([B]-[A])/365.25) & "年" & Int(((([B]-[A])-Int(([B]-[A])/365.25)*365.25))/31) & "月" AS 年月

FROM Tab1;





关于16楼的问题,强烈支持19、20楼的方法,这样处理就行了!

[此贴子已经被作者于2005-10-17 13:11:12编辑过]


作者: focke    时间: 2005-10-19 06:43
16楼的未问题能给出具体的答案吗
作者: focke    时间: 2005-10-20 08:11
象 5年,8年3个月如何分别取出日期中的年,月,日,然后分别
作者: Dragxixi    时间: 2005-10-21 02:27
在查询里不是可以直接算出来吗?
作者: focke    时间: 2005-10-23 06:23
不能呀




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3