我对 Teradata 查询实施有疑问

I have a question regarding Teradata query implementation

场景:-

如果第 1 列的值以 # 开头,则剪切前 8 个字符 如果它以 AB 结尾并以 X 开头,则仅使用中间

请帮我看看它在 Teradata 编码中的样子

假设 "use only middle" 表示问题中第二个条件的开始 X 和结束 AB 之间的所有内容,您有几个选择。

1.Use regexp_replace():

SELECT REGEXP_REPLACE('XSOMETHINGAB', '^X(.*)AB$|^#(.{1,8}).*', '');

SOMETHING

SELECT REGEXP_REPLACE('#SOMETHINGAB', '^X(.*)AB$|^#(.{1,8}).*', '')

SOMETHIN

2.Or一个案例陈述:

SELECT 
'XSOMETHINGAB' as mystring, 
CASE 
    WHEN mystring LIKE '#%' THEN SUBSTRING(mystring FROM 2 FOR 8)
    WHEN mystring LIKE 'X%AB' THEN SUBSTRING(mystring FROM 2 FOR "LENGTH"(mystring) - 3)
    ELSE mystring
    END