我想根据下面的值转换表格中的col_A
:
col_A
----------------------------
Hello_axd_sdc_we_world
Hello_g_world
Hello_world
Goodbye_A
Goodbye_sdg_Sda
Goodbye
Goodbye_asd_asd_Sddg
我希望转换后的列d_col_A
看起来像:
col_A d_col_A
-----------------------------------------
Hello_axd_sdc_we_world Hello_world
Hello_g_world Hello_world
Hello_world Hello_world
Goodbye_A Goodbye
Goodbye_sdg_Sda Goodbye
Goodbye Goodbye
Goodbye_asd_asd_Sddg Goodbye
这是我的规则:
If col_A starts with Hello and end with World
Then d_col_A = Hello_Wolrd
If col_A starts with Goodbye
Then d_col_A = Goodbye
这可能吗?谢谢!
答案 0 :(得分:1)
创建一个名为' lookup'或者像ID,first_param,second_param,translate_value
那样的东西1,hello,world,hello_world
2,goodbye,null,goodbye
现在有些人加入了。 Postgres有一个left()和right()以及length()函数,我们可以在这里使用它。如果需要,更复杂的规则集还可以包含类似的函数(第三个参数=必须包含这个单词?)。
Select a.col_A , l.translate_value
from table_a a
left join lookup_table l
on left(a.col_a,length(l.first_param)) = l.first_param
and (right(a.col_a,length(l.second_param)) = l.second_param or l.second_param is null)
我做了一个左连接,所以当规则不满足而不是删除行时会产生空值。我缺乏postgres测试环境,但语法应该是正确的。
案例版
select case when left(col_a,5) = hello and right(col_a,5) = 'world' then 'hello world'
case when left(col_a,7) = 'goodbye' then goodbye
else 'no clue what this means'
from table_a