Teradata14反转字符串中的单词

时间:2015-10-08 16:55:01

标签: sql teradata

我想颠倒teradata 14中字符串中的单词。

Ex:'jai Keith pavan ram'输入。输出应该是'ram pavan Keith jai'。我需要动态逻辑。它也适用于此I / p。

'ram sita Laxmi'应该把o / p作为'Laxmi sita ram'。

2 个答案:

答案 0 :(得分:2)

您可以使用STRTOK_SPLIT_TO_TABLE根据任何分隔符拆分字符串。拆分字符串称为标记,并根据其顺序给出tokennum。 然后使用XMLAGG将它们绑定在一起,这次按令牌号的降序排序令牌。

com.google.android.gms

答案 1 :(得分:0)

Adi,因为列中的内容不固定。对于动态数据,您有两种选择, 1.写一个SP 2.在unix脚本中处理它。将数据写入文件,使用AWK修改然后重新加载。

书面shell样本

###Script to export the results to the file###

rm -f Script.log
bteq << EOF >> Script.log 2>&1
.logon <ip or hostname>/<USR>,<PWD>
.OS rm -f Temp_export.out
.SET WIDTH 1000
.export REPORT FILE=Temp_export.out
Select
cast(cast(id as varchar(10))||','||cast(name as varchar(100)) as varchar(111))
 from DB_SOK.testTable;
.SET TITLEDASHES OFF
.export reset
.logoff
.quit
EOF
#####removed the top two files from the report generated from previous ######

 tail -n +3 Temp_export.out > temp_export_removed_header

rm -f temp_import

#######reverse the words using AWK in unxi ############################
while read LINE
do
x=`echo $LINE|cut -f1 -d','`
y=`echo $LINE|cut -f2 -d','|awk '{ for (i=NF; i>1; i--) printf("%s ",$i); print $1; }';`

echo $x,$y >> temp_import

done < temp_export_removed_header

#####script to import results to the table ####

bteq << EOF
.logon <ip or hostname>/<USR>,<PWD>

.import vartext ',' file =temp_import
database <DB_NAME>;
.quiet on;
.repeat *;
using
id (varchar(10)),
name (varchar(100))
insert into testTable2 (id,name)
values
(
:id,
:name
);
 .logoff
.quit
EOF

希望它会暂时解决你的问题...... :) 如果我有时间会尝试写一个SP。