BigQuery中将无分隔符变长字符串拆分至多列的方法求助
BigQuery 拆分无分隔符变长字符串至多列
直接用SUBSTR结合CASE WHEN就能实现需求,以下是完整SQL示例:
WITH sample_data AS ( SELECT 'ABCDEF' AS ColumnA UNION ALL SELECT 'GHIPQRS' AS ColumnA UNION ALL SELECT 'AB' AS ColumnA UNION ALL SELECT 'A' AS ColumnA ) SELECT ColumnA, -- 截断末尾1个字符,结果长度≥2则保留,否则为空 CASE WHEN LENGTH(ColumnA) - 1 >= 2 THEN SUBSTR(ColumnA, 1, LENGTH(ColumnA)-1) ELSE NULL END AS ColumnB, -- 截断末尾2个字符 CASE WHEN LENGTH(ColumnA) - 2 >= 2 THEN SUBSTR(ColumnA, 1, LENGTH(ColumnA)-2) ELSE NULL END AS ColumnC, -- 截断末尾3个字符 CASE WHEN LENGTH(ColumnA) - 3 >= 2 THEN SUBSTR(ColumnA, 1, LENGTH(ColumnA)-3) ELSE NULL END AS ColumnD, -- 截断末尾4个字符 CASE WHEN LENGTH(ColumnA) - 4 >= 2 THEN SUBSTR(ColumnA, 1, LENGTH(ColumnA)-4) ELSE NULL END AS ColumnE, -- 保留前两个字符,原字符串长度≥2则保留 CASE WHEN LENGTH(ColumnA) >= 2 THEN SUBSTR(ColumnA, 1, 2) ELSE NULL END AS ColumnF FROM sample_data;
逻辑说明
SUBSTR(ColumnA, 1, LENGTH(ColumnA)-n):从字符串开头截取到倒数第n个字符,实现“截断末尾n个字符”的效果。CASE WHEN判断:确保截取后的字符串长度至少为2,不满足则返回空(NULL),符合“不足则为空”的要求。- Column F直接截取前两个字符,仅当原字符串长度≥2时保留结果。
运行结果
| ColumnA | ColumnB | ColumnC | ColumnD | ColumnE | ColumnF |
|---|---|---|---|---|---|
| ABCDEF | ABCDE | ABCD | ABC | AB | AB |
| GHIPQRS | GHIPQR | GHIPQ | GHIP | GHI | GH |
| AB | NULL | NULL | NULL | NULL | AB |
| A | NULL | NULL | NULL | NULL | NULL |
内容的提问来源于stack exchange,提问作者BiggieIt
相关产品推荐
相关产品推荐

