我开始的查询有40,000行空行,这源于原始电子表格的问题。
使用CF16服务器
我想在一个名为'key column'的可变命名查询上查询。
在我的查询中:
var keyColumn = "Permit No."
var newQuery = "select * from source where (cast('#keyColumn#' as varchar) <> '')";
注意:转换来自this建议
我仍然在那里得到所有那些空的字段。
但是当我使用“City”作为keyColumn时,它可以工作。当这两列中的值在查询转储中都显示[空字符串]时,这两列中的值有何不同?
列名称有问题吗?这些单元格中有哪些数据?
答案 0 :(得分:3)
where ( cast('Permit No.' as varchar) <> '' )
问题是SQL,而不是值。通过将列名括在引号中,您实际上是在比较文字字符串“P-e-r-m-i-t N-o-。”,而不是该列中的值。由于字符串“许可证编号”永远不能等于空字符串,比较总是返回true。这就是生成的查询仍包含所有行的原因。
除非在ColdFusion 2016中修复,否则QoQ不支持包含空格等无效字符的列名。阅读电子表格时,一个解决方法是use the "columnNames" attribute to specify valid column names。如果做不到这一点,另一个选择是利用查询列是数组并在有效列名称下复制数据的事实:queryAddColumn(yourQuery, "PermitNo", yourQuery["Permit No."])
(尽管后一种选择不太理想,因为它可能需要在内部复制基础数据):