【问题标题】:SQL SPLIT a string by means of delimiters but reporting NULL when there is missing valuesSQL 通过分隔符拆分字符串,但在缺少值时报告 NULL
【发布时间】:2017-05-24 10:49:54
【问题描述】:

我正在使用 BigQuery,我想拆分以下类型的字符串: ;%20kostenlos%20%20online%20%20game;b;g;177393617893; 分成5个不同的值。我使用的代码如下:

   FROM (select *, FIRST(SPLIT(clicks_table.affiliate_sub5, ';')) part1,
   NTH(2, SPLIT(clicks_table.affiliate_sub5, ';')) part2,
   NTH(3, SPLIT(clicks_table.affiliate_sub5, ';')) part3,
   NTH(4, SPLIT(clicks_table.affiliate_sub5, ';')) part4,
   NTH(5, SPLIT(clicks_table.affiliate_sub5, ';')) part5

我遇到的问题是:对于某些字符串,缺少某些值,并且当它发生时,该代码不是为该部分报告 NULL,而是为以下字符串报告。例如:

;%20kostenlos%20%20online%20%20game;b;;177393617893;

那么会这样拆分:

   part 1 = %20kostenlos%20%20online%20%20game
   part 2 = b
   part 3 = 177393617893 (instead of NULL)
   part 4 = blank (instead of 177393617893)
   part 5 = blank (and that's fine)

如何避免这种情况?

【问题讨论】:

  • 编辑您的问题并提供一个示例在问题中说明您的意思。
  • 我编辑了提供示例的问题

标签: sql string split google-bigquery


【解决方案1】:

对于 BigQuery 旧版 SQL

#legacySQL
SELECT *, 
FIRST(SPLIT(REPLACE(clicks_table.affiliate_sub5, ';;', '; ;'), ';')) part1,
NTH(2, SPLIT(REPLACE(clicks_table.affiliate_sub5, ';;', '; ;'), ';')) part2,
NTH(3, SPLIT(REPLACE(clicks_table.affiliate_sub5, ';;', '; ;'), ';')) part3,
NTH(4, SPLIT(REPLACE(clicks_table.affiliate_sub5, ';;', '; ;'), ';')) part4,
NTH(5, SPLIT(REPLACE(clicks_table.affiliate_sub5, ';;', '; ;'), ';')) part5
FROM clicks_table   

对于 BigQuery StandardSQL

#standardSQL
SELECT *, 
  SPLIT(clicks_table.affiliate_sub5, ';')[SAFE_OFFSET(1)] AS part1,
  SPLIT(clicks_table.affiliate_sub5, ';')[SAFE_OFFSET(2)] AS part2,
  SPLIT(clicks_table.affiliate_sub5, ';')[SAFE_OFFSET(3)] AS part3,
  SPLIT(clicks_table.affiliate_sub5, ';')[SAFE_OFFSET(4)] AS part4,
  SPLIT(clicks_table.affiliate_sub5, ';')[SAFE_OFFSET(5)] AS part5
FROM  clicks_table 

【讨论】:

    猜你喜欢
    • 2021-06-14
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 2011-03-29
    • 2013-10-30
    • 1970-01-01
    相关资源
    最近更新 更多