如何在FileMaker的ExecuteSQL语句中实现货币格式设置?
FileMaker 内置的 ExecuteSQL 函数使用的是精简版 SQLite 语法,本身不支持 FORMAT 这类格式化函数,你可以将数据查询和格式处理拆分为两步实现需求,两种常用实现方案如下:
方案1:While 循环逐行格式化(兼容性最好,支持任意量级数据)
先通过SQL查询原始的用户名和求和金额,再用FileMaker原生的NumberFormat函数按要求格式化数值,完整代码如下:
Let ( [ // 查询原始数据,用|分隔同一行的两个字段,换行分隔不同行 rawData = ExecuteSQL ( "SELECT expenses.user, SUM(expenses.value) FROM expenses GROUP BY expenses.user" ; "|" ; ¶ ) ; rowCount = ValueCount ( rawData ) ; splitRows = Substitute ( rawData ; "|" ; ¶ ) ; output = "" ] ; While ( [ index = 1 ] ; index <= rowCount ; [ userName = GetValue ( splitRows ; index * 2 - 1 ) ; sumAmount = GetValue ( splitRows ; index * 2 ) ; // 格式化规则:千位分隔符为.,小数分隔符为,,强制保留2位小数 formattedAmount = NumberFormat ( sumAmount ; "." ; "," ; 2 ) ; output = output & userName & " - € " & formattedAmount & If ( index ≠ rowCount ; ¶ ; "" ) ; index = index + 1 ] ; output ) )
方案2:printf + 批量替换(适合小数据量场景,写法更简单)
ExecuteSQL 支持SQLite的printf函数,可以先在SQL中将数值统一转为两位小数的字符串,再批量替换分隔符即可:
Let ( [ // 先查询保留两位小数的结果 rawResult = ExecuteSQL ( "SELECT expenses.user, ' - € ', printf('%.2f', SUM(expenses.value)) FROM expenses GROUP BY expenses.user" ; "" ; ¶ ) ; // 替换小数分隔符为逗号 replaceDecimal = Substitute ( rawResult ; "." ; "," ) ; // 补充千位分隔符 addThousandSep = Substitute ( replaceDecimal ; [ ",000," ; ".000," ] ; [ ",000000," ; ".000.000," ] ) ] ; addThousandSep )
如果你的数值量级超过百万,自行在Substitute里补充对应的千位分隔规则即可。
内容的提问来源于stack exchange,提问作者Danilo
相关产品推荐
相关产品推荐

