查询空值

Query null values

我的实例 table 中有列 deletedTime。 如果值为空,现在我想检查 ColdFusion。 查询只打印一条记录。 IsNull(test) 正在返回正确的值, 但是 IsNull(searchForDeletedInstances.deletedTime) returns false 但是值在数据中table null..

<cfquery datasource="hostmanager" name="searchForDeletedInstances">
SELECT deletedTime
FROM instances
WHERE instanceId = <cfqueryparam value="#instanceId#" 
cfsqltype="CF_SQL_NVARCHAR">
</cfquery>

<cfloop query="searchForDeletedInstances">
    <cfset test= #deletedTime#>
</cfloop>

<cfreturn IsNull(test)>
<cfreturn IsNull(searchForDeletedInstances.deletedTime)>

查询中的空值作为空字符串返回。而是测试 IsDate() 。您始终可以使用 cfdump 显示查询内容,以便查看返回的数据和数据类型。

我会在查询中进行测试。

<cfquery datasource="hostmanager" name="searchForDeletedInstances">
SELECT deletedTime
FROM instances
WHERE instanceId = <cfqueryparam value="#instanceId#" cfsqltype="CF_SQL_NVARCHAR">
AND deletedTime IS NULL
</cfquery>

<cfreturn BooleanFormat(searchForDeletedInstances.recordcount)>

ColdFusion 2018 确实允许 NULL 值,但必须配置 server/site 才能使用它。这可能会破坏很多旧代码。 2018 年之前的 ColdFusion 将使用空字符串作为 NULL 值。

我会更改查询以仅查找 NULL deletedTime 记录。然后使用 searchForDeletedInstances.recordCount 值来确定是否找到了 NULL 记录。代码看起来像这样:

<cfquery datasource="hostmanager" name="searchForDeletedInstances">
SELECT deletedTime
FROM instances
WHERE instanceId = <cfqueryparam value="#instanceId#" cfsqltype="CF_SQL_NVARCHAR">
AND deletedTime IS NULL
</cfquery>

<cfset nullRecord = searchForDeletedInstances.recordCount ? true : false>

<cfreturn nullRecord>