使用Access查询计算小数位数

时间:2011-02-23 19:15:55

标签: ms-access

请给我SQL来计算Access 2007查询中unit_Price中的小数位数 非常感谢你

SELECT SYSADM_PART.ID, SYSADM_PART.UNIT_PRICE FROM SYSADM_PART;

2 个答案:

答案 0 :(得分:0)

我认为它可能是这样的(但我还没试过):

SELECT 
   SYSADM_PART.ID, 
   SYSADM_PART.UNIT_PRICE, 
   (Len([SYSADM_PART.UNIT_PRICE]) - InStrRev(Str([SYSADM_PART.UNIT_PRICE]), ".")) AS decimal_places
FROM SYSADM_PART

这是一个有根据的猜测。我假设Unit_Price是一个数字,这就是为什么我已经转换为字符串。

道歉,如果这是错的。

让我知道它是否有效,我无论如何都无法尝试!

答案 1 :(得分:0)

这将使用Mid()并将数值强制转换为字符串。 Mid()和InStr()函数在Access中进行隐式强制,但我不知道它们的Jet版本是否也会这样做,所以我用显式类型转换编写它。

SELECT SYSADM_PART.ID, SYSADM_PART.UNIT_PRICE, 
  Len(Mid(CStr(SYSADM_PART.UNIT_PRICE), InStr(CStr(SYSADM_PART.UNIT_PRICE) + 1, "."))) AS decimal_places
FROM SYSADM_PART

另请注意,这不适用于Null,也不适用于缺少小数点的UNIT_PRICE值。如果该字段具有Null或没有小数点的值,则可以使用:

SELECT SYSADM_PART.ID, SYSADM_PART.UNIT_PRICE, 
  IIf(IsNull(SYSADM_PART.UNIT_PRICE) Or (InStr(SYSADM_PART.UNIT_PRICE, ".") = 0), 0, Len(Mid(CStr(SYSADM_PART.UNIT_PRICE), InStr(CStr(SYSADM_PART.UNIT_PRICE) + 1, ".")))) AS decimal_places
FROM SYSADM_PART

我可能会对这些问题造成不平衡,但你明白了。