在Sql中使用MS Access的数学函数

时间:2009-08-07 17:43:57

标签: sql ms-access ms-access-2007 ms-jet-ace

我使用MS Access在SQL View中设计了一个查询:

select floor(num1) from t1;

当我运行它时,我得到“未定义的功能层”。

我为CeilModPowerSignSqrtTruncinitcap收到类似错误功能

Access数据库引擎的SQL语法是否具有相同的功能?

3 个答案:

答案 0 :(得分:12)

用Int()替换Floor()。我通过搜索Access帮助文件来学习这一点,在这种情况下,在查询设计器中点击F1,然后搜索“函数”。这让我得到了一个比较VBA和T-SQL函数的帮助主题。

你应该看一下Access database engine SQL Reference。我找不到通过Jet / ACE和Access表达式服务支持的函数的良好在线参考。由于某些未知原因,Access Help没有包含Jet / ACE表达式,因为Jet 3.0和这个老化的资源最终在一两年前从MSDN中删除了:(

请记住,在Access 2007中运行SQL时,在Access外部使用的Jet / ACE表达式服务支持使用Access表达式服务可能实现的更小的函数子集。一般来说,VBA5函数(不同于在Access用户界面之外支持涉及简单数据类型(与数组或对象不同)的方法;有关函数名称的近似列表,请参阅this MSDN article的“使用Jet 4.0 Service Pack 3及更高版本的沙盒模式操作”部分。

此外,VBE帮助中的函数引用应该是一个起始位置。

帮助文件并不完美,但有点搜索应该能满足您的需求。

答案 1 :(得分:1)

Public Function Floor(ByVal x As Double) As Double
'Be Because VBA does not have a Floor function.
'Works for positive numbers
'Turns 3.9 -> 3
'Note: Round(3.9) = 4

    Dim s As String, dPos As Integer
    s = CStr(x)
    dPos = InStr(s, ".")
    Floor = CLng(Left(s, dPos - 1))
End Function

答案 2 :(得分:0)

如上所述,Floor不可用于访问,您应该使用int()作为替代。如果你坚持使用Floor,你总是可以在你的mdb文件中创建一个类似于下面的vba模块函数,但这可能有点过头了。

Public Function floor(dblIn As Double, dec As Integer) As Double
  decPosition = InStr(Str(dblIn), ".")
  x = Left(dblIn, decPosition + dec - 1)
  floor = x
End Function

与上面描述的其他数学运算类似,您可以创建其他函数来创建这组功能。