2015-09-01 52 views
1

我在Ms Access中使用下面的查询。这给了我错误Syntax error in your query expression CASE WHEN not ...。你能告诉我我做错了什么吗?在Sql Server 2008 R2中,case语句正确运行。MS Access查询中的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

CASE是T-SQL。用一个IIf(条件,真,假)表达式替换。 – Gustav

回答

1

CASE声明触发第一报告错误,因为它不是在访问SQL支持。建议使用@Gustav代替IIf()

但是,您将遇到其他错误,因为CONVERT,SUBSTRINGPATINDEX在Access SQL中也不受支持。

而不是CONVERT,使用CInt()将值赋予访问整数或CLng()长整数。或者你可以使用Val()并让Access决定给你哪个数字数据类型。

而不是SUBSTRING,请使用Mid()

而不是PATINDEX,请使用InStr()

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

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