2011-02-23 90 views

回答

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是一个数字,这就是为什么我已经转换为一个字符串。

道歉,如果这是错误的。

让我知道它是否有效,我没有办法试试!

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 

还要注意,这不适用于空值,也不适用于缺少小数点的UNIT_PRICE值。如果现场有空白点,或者没有小数点值,这会工作:

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 

我可能已经在激光头括号,但你的想法。