我正在使用 Teradata 处理一些描述性数据,这些数据需要根据数据元素的类型和属性值从通用 varchar(60) 转换为不同的字段长度。因此,我需要采用 Varchar(60) 中的任何内容,并根据字段“ABCD”对字段“XYZ”进行操作。在这种情况下,XYZ 是一个 varchar(3)。为此,我在我的选择中使用 CASE 逻辑。我想做的是
消除所有出现的非字母/数字数据。我想要的只是大写字母和数字。在这种情况下,“where abcd = 'GROUP' then xyz 应该以 '000', '002', 'A', 'C' 消除额外的填充 Shift all Right
abcd xyz
1 GROUP NULL
2 GROUP $
3 GROUP 000000000000000000000000000000000000000000000000000000000000
4 GROUP 000000000000000000000000000000000000000000000000000000000002
5 GROUP A
6 GROUP C
7 GROUP r
为此,我尝试了 TRIM 和 SUBSTR 以及其他一些不起作用的方法。我已经粘贴了我现在正在工作的内容,但我不能可靠地处理选择中的数据。我真的在寻找一些关于如何更好地在 Teradata 中使用字符串的选项。我一直在研究“SQL 函数、运算符、表达式和谓词”在线 PDF。有没有更好的参考。我们在 TD 13
SELECT abcd
, CASE
-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
WHEN abcd= 'GROUP'
THEN(
CASE
WHEN SUBSTR(tx.abcd,60, 4) = 0
THEN (
SUBSTR(tx.abcd,60, 3)
)
ELSE
TRIM (TRAILING FROM tx.abcd)
END
)
END AS abcd
FROM db.descr tx
WHERE tx.abcd IS IN ( 'GROUP')
最终结果应该是这样的
abcd xyz
1 GROUP 000
2 GROUP 002
3 GROUP A
4 GROUP C
我将不得不处理大约 60 种不同的“abcd”类型,但它们都应该符合我目前看到的数据类型.. 即.. 混合大小写、非数字、非字母、填充等。
我知道有更好的方法,但我已经在几个圈子里试图在周末解决这个问题,需要朝着正确的方向努力。
在此先感谢,帕特