转换要在子句中使用的字符串

时间:2018-07-27 19:37:02

标签: teradata

我有一个这样的字符串(“汽车,公共汽车,火车”) 我想将其转换为在条款中使用。基本上我想将其转换为 (“汽车”,“公共汽车”,“火车”)。请我如何在Teradata中做到这一点

2 个答案:

答案 0 :(得分:0)

我不知道您如何获取这样的数据,但是如果您对此无法控制,则可以使用STRTOK_SPLIT_TO_TABLE

select t.* from table (strtok_split_to_table(1,'car, bus, train',',')
returns (outkey integer,tokennum integer,resultstring varchar(25))) as t

自行运行,可以为您提供:

outkey  tokennum    resultstring
1       1           car
1       2           bus
1       3           train

您可以将其用作派生表,并将其连接到要作为筛选依据的表。像这样:

select
<your table>.*
from
<your table>
inner join (select t.* from table (strtok_split_to_table(1,'car, bus, train',',')
returns (outkey integer,tokennum integer,resultstring varchar(25))) as t) dt
on yourtable.yourcolumn = dt.resultstring

答案 1 :(得分:0)

这是将输入拆分为n个逗号并使用IN子句的另一种方法。

pool = Pool().imap

查询的输出

SELECT regexp_substr('car,bus,train','[^,]+',1,day_of_calendar) fields FROM sys_calendar.calendar WHERE day_of_calendar <= (CHAR('car,bus,train') - CHAR(oreplace('car,bus,train',',','')))+1;

这是在where子句中使用的系统税

fields ~~~~~~~~ bus car train

基本上我们在这里所做的是为每个逗号分割字符串,下面的功能是计算字符串中的逗号数

SELECT * FROM <your table> WHERE yourtable.requiredColumn in ( SELECT regexp_substr('car,bus,train','[^,]+',1,day_of_calendar) fields FROM sys_calendar.calendar WHERE day_of_calendar <= (CHAR('car,bus,train') - CHAR(oreplace('car,bus,train',',','')))+1 );