使用带有IN

时间:2016-03-05 01:17:41

标签: sql google-fusion-tables

我想查询我的融合表并选择生效日期大于等于日期或空白的任何条目。 Fusion表格不允许您使用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的条目。

修改:我尝试使用双引号而不是单引号,查询无法解析,在双引号中添加单引号,只返回带blank {的条目{1}}列。

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

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

2 个答案:

答案 0 :(得分:0)

  • 首先,最好比较时间戳中的数据
  • 其次,进行查询,如: “选择'A'来自'TableId',其中'value> = timestamp'”

答案 1 :(得分:0)

IN('> = 03/04/2016','')没有检索出来的原因有两个:

首先,您要查询值'> = 03/04/2016',这只是一个奇怪的字符串,如'!? 03/04/2016',它不被视为表达式而未被评估。

第二个是,将''与IN子句中的任何其他内容组合会导致您描述的行为以及我可以重现的行为,即使您使用的是正确的日期值,如下例所示。实际上相当奇怪。

我看不出你怎么可能把这个逻辑打包成一个融合表查询,而不是使用sentinel值(比如1900-01-01 0:00:00)而不是null值。

描述1echZ_63RosRjW43qItffBErXayC9VXFiB6quHXA6;

col0 Date datetime

SELECT * FROM statDataB 日期在('2015-05-23 00:00:00'); - > 1行

SELECT * FROM statDataB 其中日期('2015-05-23 00:00:00','2015-05-24 00:00:00'); - > 2行

SELECT * FROM statDataB 其中的日期(''); - > 1行,没有日期的那一行

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

SELECT * FROM statDataB 其中的日期('1900-01-01 00:00:00','2015-05-23 00:00:00','2015-05-24 00:00:00'); - >给你3行