带有空字符串的查询的 Coldfusion 查询

Coldfusion Query of Queries with Empty Strings

我开始的查询有 40,000 行空行,这是因为原始电子表格存在问题。

使用 CF16 服务器

我想对一个名为 'key column' 的变量执行查询中的查询。

在我的查询中:

var keyColumn = "Permit No."

var newQuery = "select * from source where (cast('#keyColumn#' as varchar) <> '')";

注:选角来自建议

我仍然在那里得到所有那些空白字段。

但是当我使用 "City" 作为 keyColumn 时,它起作用了。当它们在查询转储中都显示 [empty string] 时,这两列中的值有何不同?

是不是列名的问题?这些单元格中的数据类型是什么?

where ( cast('Permit No.' as varchar) <> '' )

问题是 SQL,而不是值。通过将列名括在引号中,您实际上是在比较文字字符串 "P-e-r-m-i-t N-o-.",而不是该列中的值。由于字符串 "Permit No." 永远不会等于空字符串,因此比较总是 returns 为真。这就是生成的查询仍然包含所有行的原因。

除非在 ColdFusion 2016 中得到修复,否则 QoQ 不支持包含空格等无效字符的列名。一种解决方法是在阅读电子表格时 use the "columnNames" attribute to specify valid column names。如果做不到这一点,另一种选择是利用查询列是数组这一事实,并在 valid 列名称下复制数据:queryAddColumn(yourQuery, "PermitNo", yourQuery["Permit No."])(尽管后一种选择不太理想因为它可能需要在内部复制底层数据):