gpt4 book ai didi

sql - Teradata 中的子字符串和修剪

转载 作者:行者123 更新时间:2023-12-04 18:11:50 24 4
gpt4 key购买 nike

我正在使用 Teradata 处理一些描述性数据,这些数据需要根据数据元素的类型和属性值从通用 varchar(60) 转换为不同的字段长度。因此,我需要采用 Varchar(60) 中的任何内容,并根据字段“ABCD”对字段“XYZ”进行操作。在这种情况下,XYZ 是一个 varchar(3)。为此,我在我的选择中使用 CASE 逻辑。我想做的是

消除所有出现的非字母/数字数据。我想要的只是大写字母和数字。
在这种情况下,“where abcd = 'GROUP' then xyz 应该以 '000', '002', 'A', 'C' 的形式出现
消除额外的填充
向右移动一切

        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”类型,但它们都应该符合我目前看到的数据类型.. 即.. 混合大小写、非数字、非字母、填充等。

我知道有更好的方法,但我已经在几个圈子里试图在周末解决这个问题,需要朝着正确的方向努力。

提前致谢,

最佳答案

下面的 SQL 使用 CHARACTER_LENGTH 函数首先确定是否需要使用 Teradata 13.x 中的 native 函数执行相当于 RIGHT(tx.xyz, 3) 的操作。我认为这可能会完成您想要做的事情。我希望我没有误解你的解释:

SELECT CASE WHEN tx.abcd = 'GROUP'
AND CHARACTER_LENGTH(TRIM(BOTH FROM tx.xyz) > 3
THEN SUBSTRING(tx.xyz FROM (CHARACTER_LENGTH(TRIM(BOTH FROM tx.xyz)) - 3))
ELSE tx.abcd
END
FROM db.descr tx;

编辑:修复了 SUBSTRING 中的括号

关于sql - Teradata 中的子字符串和修剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12463233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com