_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

将短字符串转换为32位整数的最有效方法是什么?

我猜将字符串与整数进行比较的问题

如何使用通配符表语法(如 _TABLE_SUFFIX)加入 INFORMATION_SCHEMA 元数据,以便在 Google Big Query 中通过 table_name 获得结果

将包含整数的字符串与包含十六进制的字符串进行比较的最简单方法