Google BigQuery:如何检查Year字符串是否包含负值

时间:2019-04-11 08:25:50

标签: sql google-bigquery

在Google BigQuery中,以下情况是否可以帮助我? 我正在尝试确定名为Year(即-1999)的表列中是否存在负值。

我在网上搜索了很多类型的问题(包括StackOverflow)。通过所有这些,我发现可以使用CASE来完成。所以我写了下面的代码。

SELECT
    CASE WHEN Year <0 THEN 1 ELSE 0 END
    FROM `project.dataset.datatable`

但是不幸的是,运行代码时出现以下错误: 对于参数类型:STRING,INT64,运算符<没有匹配的签名。支持的签名:ANY

我认为这可能是因为Year列定义为STRING而不是INTEGER。因此,我尝试使用此代码将值格式化为INT。

SELECT 
    CAST(Year AS INT64) AS Year_INT
    FROM `project.dataset.datatable`

代码可以正常工作,因为它显示了值。但是只有100个值,而不是标准SELECT DISTINCT显示的103个值。因此,这似乎是错误的。

(!)列名称和表名称,数据集名称和项目名称不是真实的。出于隐私限制,它们被我取代。

我希望查询显示所有负数年份(如果有)。 例如,如果Year列中包含-1999年(数据质量问题),则该字符串应将其向前,以及其他类似的字符串。

2 个答案:

答案 0 :(得分:1)

这将像您的描述一样工作

SELECT Year
FROM `project.dataset.datatable`
WHERE CAST(Year AS INT64) < 0

答案 1 :(得分:1)

您可以直接在字符串中搜索连字符,而不用将CASTing值设置为INT:

where year like '%-%'

这可能比铸造便宜。