在Bigquery中

时间:2017-07-03 05:11:26

标签: google-bigquery truncate

我有两个表,我试图加入bigquery。我正在加入他们的序列号,但是对于其中一个表,序列号以5个零开头而另一个表没有。如何使用截断的值编写此连接?

我可以在联接中执行此操作,还是必须先执行此操作并将其另存为新表?

SELECT * FROM [dataworks-356fa:FirebaseArchive.PT_Results] AS Model_Results
JOIN [dataworks-356fa:FirebaseArchive.Master_List_PT] as Master_List on Serial=Serial_Number

具有5个零的表是PT_Results。

例如...... PT_Results serial#= 0000028106 Master_list_PT serial#= 28106

1 个答案:

答案 0 :(得分:1)

尝试将两列都转换为int:

SELECT *
FROM
(
    SELECT
        SUBSTR(CAST(CAST(Serial AS INT) AS STRING), 1, 5) AS Serial,
        Latest_Use,
        Total_Hours,
        Devices_Connected
    FROM [dataworks-356fa:FirebaseArchive.PT_Results]
) AS Model_Results
JOIN
(
    SELECT
       SUBSTR(CAST(CAST(Serial_Number AS INT) AS STRING), 1, 5) AS Serial_Number,
       Status,
       Model_Number
    FROM [dataworks-356fa:FirebaseArchive.Master_List_PT]
) AS Master_List
    ON Model_Results.Serial = Master_List.Serial_Number

Serial转换为整数应该从比较的角度删除前导零。请注意,我使用派生表来执行转换,以便ON子句仅涉及纯列而不涉及函数。

<强>更新

如果你想比较两个串行列之后的前五位数已经剥离了前导零,你可以尝试双重投射:

SUBSTR(CAST(CAST(Serial AS INT) AS STRING), 1, 5)