如何获取 ASP 经典 IF 检查多列上的空值或 NULL 值
How to get ASP Classic IF to check for empty or NULL values on multiple columns
在 MS SQL table 中,我有 4 列可以有 3 个不同的值(yes
、empty
或 NULL
),在这 4 列我需要用 ASP Classic 检查它们是否都是空的或 NULL。
即我有 Col1、Col2、Col3 和 Col4,如果它们都是空的或 NULL(或不同于 yes
),它应该在屏幕上写一些东西,所以我尝试这样做具有以下内容:
<% IF objFlowVAR("Col1") = "" OR IsNull(objFlowVAR("Col1")) AND objFlowVAR("Col2") = "" OR IsNull(objFlowVAR("Col2")) AND objFlowVAR("Col3") = "" OR IsNull(objFlowVAR("Col3")) AND objFlowVAR("Col4") = "" OR IsNull(objFlowVAR("Col4")) THEN %>Some Text<% END IF %>
<% IF objFlowVAR("Col1") <> "yes" AND objFlowVAR("Col2") <> "yes" AND objFlowVAR("Col3") <> "yes" AND objFlowVAR("Col4") <> "yes" THEN %>Some Text<% END IF %>
但这并没有给我我需要的结果..我做错了什么?
Null
和 DbNull
是不同的,所以不要指望 IsNull()
会像你期望的那样表现。
我发现最好的方法是先清理值;
Dim col1, col2, col3, col4
col1 = objFlowVAR("Col1") & ""
col2 = objFlowVAR("Col2") & ""
col3 = objFlowVAR("Col3") & ""
col4 = objFlowVAR("Col4") & ""
If Len(col1) = 0 And Len(col2) = 0 And Len(col3) = 0 And Len(col4) = 0 Then
'All values are empty, so do sonething.
End If
我不确定如果它为 null 是否需要做一件事,如果它不为 null 则需要做另一件事,但是使用 user692942 的方法而不是做 IsNull()
并且只检查长度以查看是否它大于 0 确实是最好的方法,特别是如果你只处理 'yes' 作为唯一的字符串。如果您以后确实有其他选择,那么将其分解成如下所示的部分可能对您有用,但我是基于他上面的示例,因此您当然需要使用 dims 和相同的变量设置。如果必须,您甚至可以嵌套 IF/THEN,但如果您有更精细的结果组合,使用 CASE SELECT
会更有效。但是关于代码:
IF Len(col1) > 0 Then
'col1 is NOT NULL
ELSE
'col1 is NULL
END IF
你可以得到一个完美的代码,如果它是空的并且它不是空的情况,然后复制它并再过去 3 次,然后将另外 3 个上的数字更改为col2 和 col3 等等,但如果这是您所需要的,将很容易快速完成整个事情。
既然有人看到这个有用,我想我也会在“CASE”中涵盖一个 CASE SELECT,因此需要更高级的逻辑,例如它是 NULL 还是 '' empty 可能很重要或不同的字符串类型,以及默认的所有其他捕手,对于这类事情非常方便。
Select Case col1
Case col1 = "" : 'code to do when its actually empty
Case col1 = Len(col1) > 0 AND col1 <> "" : 'code to do when its NULL
Case col1 = "yes" : 'code to do when its set to 'yes'
Case col1 = "no" : 'code to do when its set to 'no'
Case Else
'code to do when everything else not defined happens
End Select
其后的 'code to do parts are just comment lines that you would replace everything from the ' 带有 ASP 代码,您希望发生这种情况触发的情况。
在 MS SQL table 中,我有 4 列可以有 3 个不同的值(yes
、empty
或 NULL
),在这 4 列我需要用 ASP Classic 检查它们是否都是空的或 NULL。
即我有 Col1、Col2、Col3 和 Col4,如果它们都是空的或 NULL(或不同于 yes
),它应该在屏幕上写一些东西,所以我尝试这样做具有以下内容:
<% IF objFlowVAR("Col1") = "" OR IsNull(objFlowVAR("Col1")) AND objFlowVAR("Col2") = "" OR IsNull(objFlowVAR("Col2")) AND objFlowVAR("Col3") = "" OR IsNull(objFlowVAR("Col3")) AND objFlowVAR("Col4") = "" OR IsNull(objFlowVAR("Col4")) THEN %>Some Text<% END IF %>
<% IF objFlowVAR("Col1") <> "yes" AND objFlowVAR("Col2") <> "yes" AND objFlowVAR("Col3") <> "yes" AND objFlowVAR("Col4") <> "yes" THEN %>Some Text<% END IF %>
但这并没有给我我需要的结果..我做错了什么?
Null
和 DbNull
是不同的,所以不要指望 IsNull()
会像你期望的那样表现。
我发现最好的方法是先清理值;
Dim col1, col2, col3, col4
col1 = objFlowVAR("Col1") & ""
col2 = objFlowVAR("Col2") & ""
col3 = objFlowVAR("Col3") & ""
col4 = objFlowVAR("Col4") & ""
If Len(col1) = 0 And Len(col2) = 0 And Len(col3) = 0 And Len(col4) = 0 Then
'All values are empty, so do sonething.
End If
我不确定如果它为 null 是否需要做一件事,如果它不为 null 则需要做另一件事,但是使用 user692942 的方法而不是做 IsNull()
并且只检查长度以查看是否它大于 0 确实是最好的方法,特别是如果你只处理 'yes' 作为唯一的字符串。如果您以后确实有其他选择,那么将其分解成如下所示的部分可能对您有用,但我是基于他上面的示例,因此您当然需要使用 dims 和相同的变量设置。如果必须,您甚至可以嵌套 IF/THEN,但如果您有更精细的结果组合,使用 CASE SELECT
会更有效。但是关于代码:
IF Len(col1) > 0 Then
'col1 is NOT NULL
ELSE
'col1 is NULL
END IF
你可以得到一个完美的代码,如果它是空的并且它不是空的情况,然后复制它并再过去 3 次,然后将另外 3 个上的数字更改为col2 和 col3 等等,但如果这是您所需要的,将很容易快速完成整个事情。
既然有人看到这个有用,我想我也会在“CASE”中涵盖一个 CASE SELECT,因此需要更高级的逻辑,例如它是 NULL 还是 '' empty 可能很重要或不同的字符串类型,以及默认的所有其他捕手,对于这类事情非常方便。
Select Case col1
Case col1 = "" : 'code to do when its actually empty
Case col1 = Len(col1) > 0 AND col1 <> "" : 'code to do when its NULL
Case col1 = "yes" : 'code to do when its set to 'yes'
Case col1 = "no" : 'code to do when its set to 'no'
Case Else
'code to do when everything else not defined happens
End Select
其后的 'code to do parts are just comment lines that you would replace everything from the ' 带有 ASP 代码,您希望发生这种情况触发的情况。