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

时间:2016-08-09 16:47:02

标签: sql coldfusion qoq

我开始的查询有40,000行空行,这源于原始电子表格的问题。

使用CF16服务器

我想在一个名为'key column'的可变命名查询上查询。

在我的查询中:

var keyColumn = "Permit No."

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

注意:转换来自this建议

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

但是当我使用“City”作为keyColumn时,它可以工作。当这两列中的值在查询转储中都显示[空字符串]时,这两列中的值有何不同?

output comparison with both query of queries

列名称有问题吗?这些单元格中有哪些数据?

1 个答案:

答案 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."])(尽管后一种选择不太理想,因为它可能需要在内部复制基础数据):