如何检查Access数据库中的条件

时间:2009-06-23 12:53:37

标签: sql-server ms-access

使用Access数据库

如何使用案例条件?

我的查询

Select 
    ID, 
    Name, 
    Intime, 
    case when Outtime=Intime then ‘000000’ else Outtime end as Out 
from table

以上查询在SQL 2000中接受,但在Access数据库中不接受

我如何检查条件?

需要查询帮助。

4 个答案:

答案 0 :(得分:4)

我相信你可以使用IIF功能。

Select ID, Name, Intime, IIF(Outtime=Intime,‘000000’,Outtime) as Out
from table

直接从文档中获取:

  

IIf(expr,truepart,falsepart)

     

IIf函数语法有这些   参数

 Argument  |  Description  
 expr      |  Required. Expression you want to evaluate.  
 truepart  |  Required. Value or expression returned if expr is True.
 falsepart |  Required. Value or expression returned if expr is False.
  

说明

     

IIf总是评估truepart和   falsepart,即使它只返回   其中之一。因此,你   应该注意不良方面   效果。例如,如果评估   falsepart导致划分   零错误,即使发生错误   expr是真的。

答案 1 :(得分:1)

MS Access使用JET SQL,而不是MSSQL中的T-SQL。

答案 2 :(得分:1)

Access SQL有几个内置函数,可以提供标量值的条件评估。 IIf(已经提到)评估单个条件并返回两个值中的一个。它可以任意嵌套。还有一个Switch语句,它采用任意长的一系列参数。如果第一个参数为true,则返回第二个参数,如果第三个参数为true,则返回第四个参数,依此类推。

Switch(outtime=intime, '000000', 
       outtime='something else', 'some other value', 
       true, 'default value')

对于您的具体案例,IIf这个更好的选择,但在某些情况下,Switch可能是一个不错的选择。

答案 3 :(得分:0)

如果清理代码 - 将列相关名称重命名为'out'(这是保留字),将关键字更改为大写等,然后根据Mimer SQL-92 validator您的SQL是有效的中间SQL -92代码。因此,您应该合理地期望这个vanilla SQL代码可以在任何现代SQL实现上运行。

可悲的是,Access数据库引擎不是现代SQL实现,并且在任何级别都不符合SQL-92。

这里的问题是Access数据库引擎不支持CASE表达式。相反,它有一个自己的IIF()表达式。通常我可以通过添加限定符来找借口,“...因为Access数据库引擎与VBA共享表达式服务。”问题是,在这种情况下它不会:Access数据库引擎SQL中的IIF()表达式与VBA IIF()表达式的工作方式不同,例如。

SELECT IIF(0 = 1, 55 / 0, 99)

正常工作,返回值99。

? IIf(0 = 1, 55 / 0, 99)

因“零错误错误”而失败。

FWIW如果你确实需要VBA和SQL来工作,请考虑SWITCH表达式

SELECT SWITCH(1 = 1, 55, TRUE, 55 / 0)

? Switch(1 = 1, 55, TRUE, 55 / 0)

两者均以'除零错误'失败。

Access数据库引擎SQL在VBA中找不到表达式(例如IS NULLIN()等),为什么没有CASE表达式?我们可能永远不会知道。 Access数据库引擎记录不完整;具体来说,从来没有太多开始,我们所拥有的是充满错误(材料和遗漏的错误),并且,由于引擎的年龄(即旧),存在的文档正逐渐从MSDN和微软的消失网站。老喷气机专家已经转移到其他项目。