对于下面所述的问题,写 SQL 的最佳方法是什么
What is the best way to write SQL for the problem stated below
我有一个 table x,其列名为 Sprint
,如下所示(请注意,我仅显示此 table 中的一行作为示例):
Sprint
["com.atlassian.greenhopper.service.sprint.Sprint@55efff25[id=4659,rapidViewId=422,state=CLOSED,name=Sprint 108,startDate=2020-12-22T21:48:00.000-06:00,endDate=2021-01-04T21:48:00.000-06:00,completeDate=2021-01-05T01:28:18.156-06:00,activatedDate=2020-12-23T03:01:14.201-06:00,sequence=4658,goal=,autoStartStop=false]"]
我需要帮助编写 SQL 以将 name
、startDate
和 endDate
作为单独的列提取到视图中,输出如下所示;
Name
startDate
endDate
Sprint 108
2020-12-22T21:48:00.000-06:00
2021-01-04T21:48:00.000-06:00
您可以尝试使用 REGEXP_INSTR,如下所示,用于名称列。
select column1,
REGEXP_INSTR(column1, 'name=') name_start,
REGEXP_INSTR(column1, ',',REGEXP_INSTR(column1, 'name=') ) name_end,
substr(column1,name_start,name_end-name_start)
from values
('com.atlassian.greenhopper.service.sprint.Sprint@55efff25[id=4659,rapidViewId=422,state=CLOSED,name=Sprint 108,startDate=2020-12-22T21:48:00.000-06:00,endDate=2021-01-04T21:48:00.000-06:00,completeDate=2021-01-05T01:28:18.156-06:00,activatedDate=2020-12-23T03:01:14.201-06:00,sequence=4658,goal=,autoStartStop=false]');
SELECT
SPLIT_PART(SPRINT, ',', 4) as Name,
SPLIT_PART(SPRINT, ',', 5) as StartDate,
SPLIT_PART(SPRINT, ',', 6) as EndDate,
FROM x;
我试过了,成功了只需要清理列并更改数据类型。
SELECT
SPLIT_PART(SPLIT_PART(SPRINT, ',', 4),'=',2) as Name,
SPLIT_PART(SPLIT_PART(SPRINT, ',', 5),'=',2) as StartDate,
SPLIT_PART(SPLIT_PART(SPRINT, ',', 6),'=',2) as EndDate
FROM x;
这是给出输出的上述问题的一种解决方案;
Name
StartDate
EndDate
Sprint 108
2020-12-22T21:48:00.000-06:00
2021-01-04T21:48:00.000-06:00
我有一个 table x,其列名为 Sprint
,如下所示(请注意,我仅显示此 table 中的一行作为示例):
Sprint |
---|
["com.atlassian.greenhopper.service.sprint.Sprint@55efff25[id=4659,rapidViewId=422,state=CLOSED,name=Sprint 108,startDate=2020-12-22T21:48:00.000-06:00,endDate=2021-01-04T21:48:00.000-06:00,completeDate=2021-01-05T01:28:18.156-06:00,activatedDate=2020-12-23T03:01:14.201-06:00,sequence=4658,goal=,autoStartStop=false]"] |
我需要帮助编写 SQL 以将 name
、startDate
和 endDate
作为单独的列提取到视图中,输出如下所示;
Name | startDate | endDate |
---|---|---|
Sprint 108 | 2020-12-22T21:48:00.000-06:00 | 2021-01-04T21:48:00.000-06:00 |
您可以尝试使用 REGEXP_INSTR,如下所示,用于名称列。
select column1,
REGEXP_INSTR(column1, 'name=') name_start,
REGEXP_INSTR(column1, ',',REGEXP_INSTR(column1, 'name=') ) name_end,
substr(column1,name_start,name_end-name_start)
from values
('com.atlassian.greenhopper.service.sprint.Sprint@55efff25[id=4659,rapidViewId=422,state=CLOSED,name=Sprint 108,startDate=2020-12-22T21:48:00.000-06:00,endDate=2021-01-04T21:48:00.000-06:00,completeDate=2021-01-05T01:28:18.156-06:00,activatedDate=2020-12-23T03:01:14.201-06:00,sequence=4658,goal=,autoStartStop=false]');
SELECT
SPLIT_PART(SPRINT, ',', 4) as Name,
SPLIT_PART(SPRINT, ',', 5) as StartDate,
SPLIT_PART(SPRINT, ',', 6) as EndDate,
FROM x;
我试过了,成功了只需要清理列并更改数据类型。
SELECT
SPLIT_PART(SPLIT_PART(SPRINT, ',', 4),'=',2) as Name,
SPLIT_PART(SPLIT_PART(SPRINT, ',', 5),'=',2) as StartDate,
SPLIT_PART(SPLIT_PART(SPRINT, ',', 6),'=',2) as EndDate
FROM x;
这是给出输出的上述问题的一种解决方案;
Name | StartDate | EndDate |
---|---|---|
Sprint 108 | 2020-12-22T21:48:00.000-06:00 | 2021-01-04T21:48:00.000-06:00 |