Nullif-在Coldfusion中使用
正在寻找有关此代码的一些帮助。在不发布整个文件的情况下,我只需要在Coldfusion中使用Nullif的一些帮助 我可以在我的SQL语句中使用它,但为了学习,我想知道在设置变量时是否可以使用它,如下所示:- 代码没有抛出任何错误,但我想知道将0放在Nullif后面的什么位置Nullif-在Coldfusion中使用,coldfusion,nullif,Coldfusion,Nullif,正在寻找有关此代码的一些帮助。在不发布整个文件的情况下,我只需要在Coldfusion中使用Nullif的一些帮助 我可以在我的SQL语句中使用它,但为了学习,我想知道在设置变量时是否可以使用它,如下所示:- 代码没有抛出任何错误,但我想知道将0放在Nullif后面的什么位置 <cfif AE_C NEQ 0> <cfset AE_P=AE_T/AE_C> <cfset AE_A=AE/AE_C*100> <cfset AE_B
<cfif AE_C NEQ 0>
<cfset AE_P=AE_T/AE_C>
<cfset AE_A=AE/AE_C*100>
<cfset AE_B = AE-AE_C/H8*H9>
<cfset AE_D=AE/H9*H8>
<cfelse>
<cfset AE_P=ISNULL(AE_T/NULLIF(AE_C))>
<cfset AE_A=ISNULL(AE/NULLIF(AE_C*100))>
<cfset AE_B=ISNULL(AE-AE_C/NULLIF(H8*H9))>
<cfset AE_D=ISNULL(AE/NULLIF(H9*H8))>
</cfif>
希望可以这样做。重要:您的代码没有显示任何错误,因为
ISNULL
正在掩盖错误
如果不是有效的ColdFusion函数,则
null也是无效的。我相信页面中没有错误的原因,因为ColdFusion函数似乎是一个非常通用的函数,并且显示了一些未记录的特性。即使其中的表达式已定义,也不会返回错误,如果表达式在语法上有效,也不会返回错误
例如
作为替代方案,您可以执行以下操作
下面的代码有点粗糙,但您可以检查该函数。对于不是数字的任何字符串,它都将返回0(有关更多详细信息,请查看文档)
NULLIF(AE_C)
变为val(AE_C)
如果val()
返回0
,那么ISNULL()
的输出将是YES
,因为除以0
会抛出错误。重要的:您的代码没有显示任何错误,因为ISNULL
正在掩盖错误
如果
不是有效的ColdFusion函数,则null也是无效的。我相信页面中没有错误的原因,因为ColdFusion函数似乎是一个非常通用的函数,并且显示了一些未记录的特性。即使其中的表达式已定义,也不会返回错误,如果表达式在语法上有效,也不会返回错误
例如
作为替代方案,您可以执行以下操作
下面的代码有点粗糙,但您可以检查该函数。对于不是数字的任何字符串,它都将返回0(有关更多详细信息,请查看文档)
NULLIF(AE_C)
变为val(AE_C)
如果val()
返回0
,那么ISNULL()
的输出将是YES
,因为除以0
会出错。这更多的是一个注释而不是答案。请参阅RRK关于NULLIF
不是有效的ColdFusion函数和ISNULL()
隐藏错误的回答
我的评论更多的是关于你们运作的逻辑。您不需要执行
原件:
<cfif AE_C NEQ 0>
<cfset AE_P=AE_T/AE_C>
<cfset AE_A=AE/AE_C*100>
<cfset AE_B = AE-AE_C/H8*H9>
<cfset AE_D=AE/H9*H8>
<cfelse>
<cfset AE_P=ISNULL(AE_T/NULLIF(AE_C))>
<cfset AE_A=ISNULL(AE/NULLIF(AE_C*100))>
<cfset AE_B=ISNULL(AE-AE_C/NULLIF(H8*H9))>
<cfset AE_D=ISNULL(AE/NULLIF(H9*H8))>
</cfif>
我不知道您的代码的流程,因此我不知道H8
和H9
如何受到aeu C
的影响,因此您可能还需要检查0
但是,我仍然会回到我通常的想法,如果这些计算是在SQL中使用的,而不是真正在代码中使用的,那么它们应该在SQL中完成,而不是传递给应用服务器,然后再返回SQL。不过,我也不知道您的代码在做什么,所以在代码中使用这些计算器可能更合适 这与其说是回答,不如说是评论。请参阅RRK关于NULLIF
不是有效的ColdFusion函数和ISNULL()
隐藏错误的回答
我的评论更多的是关于你们运作的逻辑。您不需要执行
原件:
<cfif AE_C NEQ 0>
<cfset AE_P=AE_T/AE_C>
<cfset AE_A=AE/AE_C*100>
<cfset AE_B = AE-AE_C/H8*H9>
<cfset AE_D=AE/H9*H8>
<cfelse>
<cfset AE_P=ISNULL(AE_T/NULLIF(AE_C))>
<cfset AE_A=ISNULL(AE/NULLIF(AE_C*100))>
<cfset AE_B=ISNULL(AE-AE_C/NULLIF(H8*H9))>
<cfset AE_D=ISNULL(AE/NULLIF(H9*H8))>
</cfif>
我不知道您的代码的流程,因此我不知道H8
和H9
如何受到aeu C
的影响,因此您可能还需要检查0
但是,我仍然会回到我通常的想法,如果这些计算是在SQL中使用的,而不是真正在代码中使用的,那么它们应该在SQL中完成,而不是传递给应用服务器,然后再返回SQL。不过,我也不知道您的代码在做什么,所以在代码中使用这些计算器可能更合适 这是Ben Nadel写的一些代码,我发现这些代码可以解决这个错误,也许有人可以帮助我如何实现它,因为我就是想不起来
<!---
Do SQL division with divide-by-zero protection. But this,
time, let's provide a default value if the division is
not valid.
--->
<cfquery name="qDivision" datasource="#REQUEST.DSN.Source#">
SELECT
(
ISNULL(
(45 / NULLIF( 0, 0 )),
0
)
) AS value
;
</cfquery>
<!--- Output resulting value. --->
[ #qDivision.value# ]
挑选
(
ISNULL(
(45/NULLIF(0,0)),
0
)
)作为价值
;
[#qDivision.value]
这是Ben Nadel写的一些代码,我发现这些代码可以解决这个错误,也许有人可以帮助我如何实现它,因为我只是无法理解它
<!---
Do SQL division with divide-by-zero protection. But this,
time, let's provide a default value if the division is
not valid.
--->
<cfquery name="qDivision" datasource="#REQUEST.DSN.Source#">
SELECT
(
ISNULL(
(45 / NULLIF( 0, 0 )),
0
)
) AS value
;
</cfquery>
<!--- Output resulting value. --->
[ #qDivision.value# ]
挑选
(
ISNULL(
(45/NULLIF(0,0)),
0
)
)作为价值
;
[#qDivision.value]
如果将0
设置为null
,您将得到一个错误,因为除以0将是一个错误。如果您可以提供所需输出的概要,那将非常好。上面的代码只是20多个代码中的一组。我们需要计算显示0.00,当我们将0除以4时,没有抛出异常。目前,我收到的计算结果是,显然被计算为1的每个值都是1。我发现了Ben Nadel编写的一段关于处理Nullif()的代码,当在SQL语句中使用它时,它会正确设置所有值,这样您就不会收到错误。我就是想不出如何实现它。我会把它贴在下面。也许这就是答案?0/1
是有效的数学。42/null也是如此。当您尝试将底部的数字设为0(1/0
)时,将抛出错误。我认为您遇到的问题是隐式类型转换9/2
将返回5
,但9.0/2
将返回4.5
。您必须将每个操作中的第一个数字设置为十进制,以使其余数字也强制设置为十进制
<!---
Do SQL division with divide-by-zero protection. But this,
time, let's provide a default value if the division is
not valid.
--->
<cfquery name="qDivision" datasource="#REQUEST.DSN.Source#">
SELECT
(
ISNULL(
(45 / NULLIF( 0, 0 )),
0
)
) AS value
;
</cfquery>
<!--- Output resulting value. --->
[ #qDivision.value# ]