我在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;
答案 0 :(得分:1)
CASE
语句触发第一个报告错误,因为Access SQL不支持该错误。使用IIf()
代替@Gustav建议。
但是,您会遇到其他错误,因为Access SQL中也不支持CONVERT
,SUBSTRING
和PATINDEX
。
而不是CONVERT
,使用CInt()
将值转换为Access Integer或将CLng()
转换为Long Integer。或者您可以使用Val()
并让Access决定为您提供哪种数值数据类型。
而不是SUBSTRING
,请使用Mid()
。
而不是PATINDEX
,请使用InStr()
。
假设这些建议消除了语法错误,您可能仍会遇到Like
通配符的问题。
如果您将从查询设计器或DAO下的其他位置运行查询,则Access需要*
而不是%
作为通配符。仅当从ADO / OleDb运行查询时,%
才是正确的通配符。