【发布时间】:2018-10-03 18:20:44
【问题描述】:
我正在使用 BigQuery,我正在尝试解析逗号分隔的字符串以查找其中的特定数字。
示例表如下
|--------|-----------------------------------------------------------|
| userID | sequence |
|--------|-----------------------------------------------------------|
| 123abc | 1,2,3,4,5,6,7,8 |
|--------|-----------------------------------------------------------|
| 456bcd | 1,2,3,4,5,6,7,8,9,10,11 |
|--------|-----------------------------------------------------------|
| 789def | 1,2,3,4 |
|--------|-----------------------------------------------------------|
我需要创建一个 CASE 语句,其中字符串“序列”的每个值都根据以下逻辑进行评估,并将结果输出到它自己的列。
SELECT userID
,sequence
,CASE WHEN sequence CONTAINS '1' THEN 1 ELSE 0 END AS action1
,CASE WHEN sequence CONTAINS '2' THEN 1 ELSE 0 END AS action2
,CASE WHEN sequence CONTAINS '3' THEN 1 ELSE 0 END as action3
....
,CASE WHEN sequence CONTAINS '9' AND '11' THEN 1 ELSE 0 END as action10
这将产生以下输出。
|--------|-------------------------|-------|-------|-------|---------|
| userID | sequence |action1|action2|action3|action10 |
|--------|-------------------------|-------|-------|-------|---------|
| 123abc | 1,2,3,4,5,6,7,8 | 1 | 1 | 1 | 0 |
|--------|-------------------------|-------|-------|-------|---------|
| 456bcd | 1,2,3,4,5,6,7,8,9,10,11 | 1 | 1 | 1 | 1 |
|--------|-------------------------|-------|-------|-------|---------|
| 789def | 1,2 | 1 | 1 | 0 | 0 |
|--------|-------------------------|-------|-------|-------|---------|
请不要最后一个 CASE WHEN 语句非常重要,因为我需要将这种非常具体的字符串值组合作为其自己的独特操作。
我相信这可以在 SQL Server 中使用类似的方式实现:
CASE WHEN CHARINDEX('1', 'sequence')>0 THEN 1 ELSE 0 END as action1
,CASE WHEN CHARINDEX('2', 'sequence')>0 THEN 1 ELSE 0 END as action2
,CASE WHEN CHARINDEX('3', 'sequence')>0 THEN 1 ELSE 0 END as action3
...
,CASE WHEN CHARINDEX('9', 'sequence')>0 AND CHARINDEX('11', 'sequence')>0 THEN 1 ELSE 0 END as action10
但是,我在 BigQuery 中找不到可以达到相同结果的等效函数,而且我在 REGEX 上的尝试也失败了。
我将非常感谢您在这里提供一些指导。提前致谢。
【问题讨论】:
标签: sql regex string google-bigquery