我有一个这样的字符串(“汽车,公共汽车,火车”) 我想将其转换为在条款中使用。基本上我想将其转换为 (“汽车”,“公共汽车”,“火车”)。请我如何在Teradata中做到这一点
答案 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
);