postgresql - 不嵌套,对于每个结果
Posted
技术标签:
【中文标题】postgresql - 不嵌套,对于每个结果【英文标题】:postgresql - unnest, for each result 【发布时间】:2018-03-28 14:28:52 【问题描述】:我想创建一个视图,并对 unnest 函数的每个结果进行一些数据处理。
在我的专栏 column2 中,我有:
-
“12345”
“123456”
“12345,123456”或更多数字
我想做一些 unnest(col2, ',') 并为每个结果做这样的事情:
if length(col2) = 5 then treatment_1
else if length(col2) = 6 then treatment_2
表中示例:
col1 col2
-------------------
D1 12345, 123456
D3 12345
D4 123456
视图中的预期结果(对 col2 中的每一行进行处理):
col1 col2
-------------------
D1 12345
D1 123456
D3 12345
D4 123456
【问题讨论】:
col2 是什么数据类型? Col2 是一个字符串。 【参考方案1】:您可以使用regexp_split_to_table
将字符串拆分为多行:
select t1.col1
, case
when length(split.col2) > 5 then right(split.col2, 3)
else replace(split.col2, '123', '***')
end as col2
from Table1 t1
cross join
regexp_split_to_table(t1.col2, '\s*,\s*') split(col2)
Working example at SQL Fiddle.
【讨论】:
好的,我知道该怎么做,但是如何对每个结果进行处理? 什么样的治疗?你可以使用case
,比如when len(col2) > 5 then ... else ... end
。但这只能转换一个值,不能将其拆分为多行
我想两者都做。首先拆分,并对每个值进行一些处理(我想应用一个正确的函数和一个替换)。
好的,你可以在case
中做right
和replace
,添加示例以上是关于postgresql - 不嵌套,对于每个结果的主要内容,如果未能解决你的问题,请参考以下文章