MS Access查询中的case语句给出错误

时间:2015-09-01 07:52:22

标签: ms-access

我在Ms Access中使用以下查询。这给了我错误Syntax error in your query expression CASE WHEN not ...。你能告诉我我做错了什么吗?在Sql Server 2008 R2中,case语句正确运行。

SELECT TableApron.RadButtonNo, TableApron.ShortName, QueryForNot1.InspectionDate, QueryForNot1.Findings, QueryForNot1.Status, QueryForNot1.Initials, TableApron.DeptName, TableApron.Lost, TableApron.InServelDate, TableApron.RemovedDate, TableApron.PrivateUserName, TableApron.PrivateUserEmail, TableApron.ApronType, TableApron.Manufacturer
FROM TableApron LEFT JOIN QueryForNot1 ON TableApron.RadButtonNo=QueryForNot1.RadButtonNoI
WHERE (((TableApron.Lost)="N" Or (TableApron.Lost)=[@Lost]) And ((TableApron.InServelDate) Is Null Or (TableApron.InServelDate) Between CDATE([@From]) And CDATE([@To]) Or (TableApron.InServelDate)<CDATE([@To])) And ((TableApron.RemovedDate) Is Null Or (TableApron.RemovedDate) Between CDATE([@From]) And CDATE([@To]) Or (TableApron.RemovedDate)>CDATE([@To])))
ORDER BY
CASE
       WHEN not TableApron.RadButtonNo like '%[^0-9]%' THEN CONVERT(int,TableApron.RadButtonNo)
       WHEN TableApron.RadButtonNo like '[0-9]%' THEN CONVERT(int,SUBSTRING(TableApron.RadButtonNo,1,PATINDEX('%[A-Z]%',TableApron.RadButtonNo)-1))
    END,
    CASE
       WHEN not TableApron.RadButtonNo like '%[^0-9]%' THEN NULL
       WHEN TableApron.RadButtonNo like '[0-9]%' THEN SUBSTRING(TableApron.RadButtonNo,PATINDEX('%[A-Z]%',TableApron.RadButtonNo),9000)
       ELSE TableApron.RadButtonNo
    END;

1 个答案:

答案 0 :(得分:1)

CASE语句触发第一个报告错误,因为Access SQL不支持该错误。使用IIf()代替@Gustav建议。

但是,您会遇到其他错误,因为Access SQL中也不支持CONVERTSUBSTRINGPATINDEX

而不是CONVERT,使用CInt()将值转换为Access Integer或将CLng()转换为Long Integer。或者您可以使用Val()并让Access决定为您提供哪种数值数据类型。

而不是SUBSTRING,请使用Mid()

而不是PATINDEX,请使用InStr()

假设这些建议消除了语法错误,您可能仍会遇到Like通配符的问题。

如果您将从查询设计器或DAO下的其他位置运行查询,则Access需要*而不是%作为通配符。仅当从ADO / OleDb运行查询时,%才是正确的通配符。