_TABLE_SUFFIX 字符串比较与整数
Posted
技术标签:
【中文标题】_TABLE_SUFFIX 字符串比较与整数【英文标题】:_TABLE_SUFFIX string comparisonwith integer 【发布时间】:2018-12-10 14:58:37 【问题描述】:在 Bigquery 教程中,有一个例子提到: 在 noaa_gsod 数据集下有几个名为 gsod1991,gsod1992,gsod1993....gsod2018 的表。 我们使用 _table_suffix 过滤器编写查询
SELECT * from `bigquery-public-data.noaa_gsod.gsod*` WHERE _TABLE_SUFFIX >'2015'
其中gsod2018是一个字符串,gsod后面的四位数字用作_TABLE_SUFFIX进行比较。 但是为什么在 2015 年之后的任何一年都使用字符串比较呢? 当我们想得到 2015 年后的表时,那不是数字比较而不是字符串比较吗?
【问题讨论】:
【参考方案1】:当我们想得到 2015 年后的表时,那不是数字比较而不是字符串比较吗?
将年份作为字符串还是数字进行比较没有区别,除非您比较的是 1000 年之前或 9999 年之后的年份,因为从那时起,年份的位数不同。举个例子:
SELECT
year,
year > 2015 AS number_is_greater,
CAST(year AS STRING) > '2015' AS string_is_greater
FROM UNNEST(GENERATE_ARRAY(2010, 2020)) AS year;
+------+-------------------+-------------------+
| year | number_is_greater | string_is_greater |
+------+-------------------+-------------------+
| 2010 | false | false |
| 2011 | false | false |
| 2012 | false | false |
| 2013 | false | false |
| 2014 | false | false |
| 2015 | false | false |
| 2016 | true | true |
| 2017 | true | true |
| 2018 | true | true |
| 2019 | true | true |
| 2020 | true | true |
+------+-------------------+-------------------+
【讨论】:
以上是关于_TABLE_SUFFIX 字符串比较与整数的主要内容,如果未能解决你的问题,请参考以下文章
具有多个 _TABLE_SUFFIX 条件的嵌套查询的意外结果
使用 _TABLE_SUFFIX 查询时,无法将 STRUCT 类型的字段“user_properties”读取为 STRING
如何使用通配符表语法(如 _TABLE_SUFFIX)加入 INFORMATION_SCHEMA 元数据,以便在 Google Big Query 中通过 table_name 获得结果