ms 访问中的自定义 DateDiff 函数不起作用

Posted

技术标签:

【中文标题】ms 访问中的自定义 DateDiff 函数不起作用【英文标题】:Customized DateDiff function in ms access does not work 【发布时间】:2021-12-06 23:56:37 【问题描述】:

我为我的 access 数据库创建了一个自定义 DateDiff 函数。我希望它在两个日期之间给出一个结果,例如 x 年 y 月2年7个月。代码如下:

Option Compare Database
Option Explicit

Function MyDateDiff(D1 As Date, D2 As Date) As Variant
    ' D1= Begin Date
    ' D2= Current Date
    Dim M1 As Integer
    Dim M2 As Integer
    Dim Y1 As Integer
    Dim y As String
    Dim mo As String
    
    If D1 = Null Then
        Exit Function
    End If
    
    If D2 = Null Then
        Exit Function
    End If
    
    M1 = DateDiff("m", D1, D2)
    Y1 = Int(M1 / 12)
    M2 = M1 - (Y1 * 12)
    
    If Y1 > 1 Then
        y = "years"
    Else: y = "year"
    End If
    
    If M2 > 1 Then
        mo = "months"
    Else: mo = "month"
    End If
    
    MyDateDiff = Y1 & y & M2 & mo
    
    
End Function

我在查询中使用它,但它显示如下错误:

我需要知道我在这里做错了什么。提前致谢。

【问题讨论】:

你把程序放在通用模块里了吗?模块不能与过程同名。 而这个If D1 = Null Then 是错误的语法。应该是If IsNull(D1) Then;但它永远不会发生,因为您已将 D1D2 声明为 Date,它永远不会是 Null 【参考方案1】:

无法将任何东西与 Null 进行比较,甚至不能与另一个 Null 进行比较,因为 Null 没有什么可比较的。使用 IsNull() 或在查询中使用 Is Null。查看 allenbrowne.com/casu-12.html。此外,只有 Variant 类型的变量可以保存 Null。声明为 Date 类型的变量将具有默认值 12:00:00 AM。考虑:

Function MyDateDiff(D1 As Date, D2 As Date) As Variant
    ' D1= Begin Date
    ' D2= Current Date
    Dim M1 As Integer
    Dim M2 As Integer
    Dim Y1 As Integer
    Dim y As String
    Dim m As String
    
    If Year(D1) = 1899 Or Year(D2) = 1899 Then
        MyDateDiff = Null
    Else
        M1 = DateDiff("m", D1, D2)
        Y1 = Int(M1 / 12)
        M2 = M1 - (Y1 * 12)
        y = " year" & IIf(Y1 > 1, "s", "")
        m = " month" & IIf(M2 > 1, "s", "")
        MyDateDiff = Y1 & y & " " & M2 & m
    End If
End Function

【讨论】:

以上是关于ms 访问中的自定义 DateDiff 函数不起作用的主要内容,如果未能解决你的问题,请参考以下文章

定义和用法 DATEDIFF() 函数返回两个日期之间的天数

MS SQL系统函数之DATEDIFF

C 中的自定义函数在 Red Hat Linux 中不起作用,但在 HPUX 中可以

Oracle中的DATEDIFF函数[重复]

raise PermissionDenied 中的自定义消息在 Django rest 中不起作用

在 ms 访问中不起作用的日期之间的比较