sql—根据sqlite数据库中的空间引用和模式,将select查询中的值提取为单个列

ws51t4hk  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(274)

我有一个sqlite表,其“description”列中包含如下数据

Description 
"DX SVFO FERX DETYUY09"
"FCS DFT DEUU WALK LIM"
"D FX DS"

现在我必须根据空格的出现来拆分它们,并删除空格
预期结果

Description_1 Description_2 DESCRIPTION3
DX             SVFO          D
FCS            DFT           F
D              FX            D

下面是预期的确切模式。描述\u 1在开始时不使用任何字符,第二个、第三个字符也不使用任何字符,从第二个空格出现到第三个空格出现时只使用一个字符
您能告诉我如何在这里构建模式,以便在sqlite数据库中使用select语句来实现这一点吗
比尔,g

noj0wjuj

noj0wjuj1#

这可以通过字符串函数来实现,比如 substr() 以及 instr() 但即使是第二部分的访问也会变得非常复杂,所以我会使用递归 CTE 它还可扩展:

with cte as (
  select descr, 1 idx, 
         substr(descr, 1, instr(descr, ' ') - 1) leftpart,
         substr(descr, instr(descr, ' ') + 1) rightpart
  from (select description || ' ' descr from tablename)
  union all
  select descr, idx + 1, 
         substr(rightpart, 1, instr(rightpart, ' ') - 1),
         substr(rightpart, instr(rightpart, ' ') + 1)
  from cte
  where idx < 3 
)
select 
  max(case when idx = 1 then leftpart end) Description_1,
  max(case when idx = 2 then leftpart end) Description_2,
  max(case when idx = 3 then substr(leftpart, 1, 1) end) Description_3
from cte
group by descr
order by descr, idx

请看演示。
结果:

| Description_1 | Description_2 | Description_3 |
| ------------- | ------------- | ------------- |
| D             | FX            | D             |
| DX            | SVFO          | F             |
| FCS           | DFT           | D             |

相关问题