2016-03-05 57 views
0

我想查询我的融合表并选择一个有效的日期比等于一个日期,或空白更大的任何条目。融合表不允许你使用OR,但它允许IN选择空白单元格与融合表的查询与

我的查询:"SELECT 'Effective To' FROM "+tableId+" WHERE 'Effective To' IN ('>= 03/04/2016', '')"

我希望它可以检索条目是Effective To或者是blank>= 03/04/2016。而是只选择>= 03/04/2016的行。如果我修改查询到WHERE 'Effective To' = '')那么它将会获得有一个空白Effective To所有条目。

编辑:我试过双引号,而不是单打,而查询无法解析,添加单引号到双引号,而且只用blankEffective To列返回条目。

查询: "SELECT 'Effective To' FROM "+tableId+" WHERE 'Effective To' IN ('>= 03/04/2016', /"''/")"这只会返回带有空白Effective To列的列。

为什么这不起作用?如何在IN运算符中选择空白单元格?

+0

在大多数数据库中,单引号表示字符串常量而不是列,我不知道这在Google Fusion中是否属实,但它可能会解释您的问题。 –

+0

感谢您的答复,只是给了一个镜头,现在它只返回一个空白的'Effective To'列。我对IN的工作原理有误解吗?我希望这个功能就像一个OR? –

+0

我想你会比较Effective To ='> = 03/04/2016'而不是Effective To> = 03/04/2016。 – Kason

回答

0
  • 首先,更好地数据的时间戳
  • 第二次比较,使查询,如: “选择 'A' 从 'TABLEID',其中 '值> =时间戳'”
0

IN( “> = 2016年3月4日”,“”)不恢复的事情出来的原因有二:

第一个是,你正在查询的价值“> = 2016年3月4日”,这只是一个奇怪的字符串,如'!? ',它不会被视为表达式,也不会被评估。

第二个是,结合'与在行为IN子句结果别的你描述和我能复制,即使你使用正确的日期值,如下面的例子。实际上很奇怪。

我看不出你怎么可能收拾这个逻辑到比使用定点值(类似1900-01-01 0:00:00)其他单一融合表的查询,而不是一个空值。

describe 1echZ_63RosRjW43qItffBErXayC9VXFiB6quHXA6;

COL0日期日期时间

SELECT * FROM statDataB 其中在( '2015年5月23日00:00:00')日期; - > 1行

SELECT * FROM statDataB where Date('2015-05-23 00:00:00','2015-05-24 00:00:00'); - > 2行

SELECT * FROM statDataB where where in(''); - > 1行,没有日期的那个

SELECT * FROM statDataB where Date in('','2015-05-23 00:00:00','2015-05-24 00:00:00 “); - > 1行,即没有日期

SELECT * FROM statDataB where Date in''''''''''''''''''''''' 05-24 00:00:00'); - >让你3行

+0

感谢回复,本身查询'> = 03/04/2016''确实会返回日期大于或等于'03/04/2016'的所有行。这只适用于'IN'运算符,在它之外我使用'> = '03/04/2016''如果我在'IN'运算符里面做了这个查询,那么查询就无法解析。它似乎认为,作为“IN”内部的一个表达式,在它之外它被视为一个值。这对我来说真的很奇怪。 –

+0

看起来我要么停止留下空列,而是用'01/01/2032'之类的东西填充它们,或者执行两个查询并将它们的结果拼接在一起。一个查询所有行''> ='日期,另一个查询所有列的空白行。 我目前正在使用更高版本,执行两个查询而不是一个,并将结果拼接在一起。这不像我想的那么光滑。 –

+1

正如本答案所示,IN条件是字符串比较。说“foo IN”> = 3'“不会比较任何内容到3,它只是检查列foo是否将字符串值设置为”> = 3“。填充空列是实现这一目标的唯一方法。 –