1

ColdFusion 的valuelist函数文档说它不评估这些值,这就是它过去对我的表现。我过去曾valuelist多次使用该功能,以前从未遇到过这个问题。我们使用的是 CF9.0.1,但这最初是在 CF9.0 的实例上弹出的。

number当我们从一个支持浮点值的 Oracle 数据库中提取值时,情况就出现了。存储的值都是整数,而不是浮点数。下面的代码复制了我们看到的行为。数据是通过我们可以更改(使用CAST)的存储过程检索的,但如果可能的话希望避免。

<cfscript>
    qryVLTest = queryNew('member_id') ;
    for ( i = 1; i LTE 10; i=i+1) {
      queryAddRow(qryVLTest,1) ;
      querySetCell(qryVLTest,'member_id',i) ;   
    }
    writedump(qryVLTest) ;
    writeoutput(valuelist(qryVLTest.member_id)) ;
</cfscript>

转储显示我期望的值:整数 1-10。

但是,该valuelist函数的输出返回以下内容:

1,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0

第一个值之后的所有值都被评估并转换为浮点数。为什么会这样,将来如何防止这种情况发生?

4

2 回答 2

6

你有2个选择。你可以这样做:

querySetCell(qryVLTEst,"member_id","#i#")

这应该强制一个字符串。或者,如果这是您想要的,您可以指定 INT(如 azawaza 所示)。

queryNew("member_id","Integer");
于 2012-06-18T14:46:47.430 回答
3

我知道你说过你不想使用 CAST() 但也许你的意思是在 Oracle 中。请记住,您也可以使用 Q of a Q 在 CF 中进行 CAST。

运行您的 Oracle 查询,然后使用 Query of a Query 重铸数字,如

<cfquery name="blah" dbtype="query">
SELECT CAST(member_ID AS Integer) AS member_ID
FROM  myFancyPantsOracleQuery
</cfquery>

那会做我认为的伎俩。

于 2012-06-18T15:29:49.700 回答